2009-08-20 17 views
2

Classic ASPプロジェクトの一部として、ユーザーはZipアーカイブから動的に抽出され、Response.BinaryWrite()経由で送信されたファイルをダウンロードできます。単に "document.asp?id = [some id here]"と呼んでください。Response.BinaryWrite()を使用してファイルを送信したあとで削除します

抽出と送信は問題ではありませんが、ダウンロードが完了した後、抽出したファイルを削除する必要があります。前にASPやVBAをやったことはありませんでした。それが私がここにこだわった理由ですね。

FileSystemObject.DeleteFile()を使用してResponse.WriteBinary()の直後にファイルを削除しようとしましたが、クライアント側で404エラーが発生します。

ダウンロードが完了するまで待ってから追加の操作を行うにはどうすればよいですか?

編集:これは私のコードがどのように見えるかです:

'Unzip a specified file from an archive and put it's path in *document* 

set stream = Server.CreateObject("ADODB.Stream") 
stream.Open 
stream.Type = 1 ' binary 
stream.LoadFromFile(document) 

Response.BinaryWrite(stream.Read) 

'Here I want to delete the *document* 
+0

WriteBinaryに何を渡していますか?あなたがしていることの実際のコードを表示できますか? – AnthonyWJones

答えて

0

解決策が見つかりました:抽出されたファイルは特別なディレクトリに保存され、ユーザーはdocument.aspを実行するたびに1時間以上経過したファイルをこのディレクトリでチェックして削除します。

私はこれを管理するのが最も簡単な方法だと思っていますが、さらに、ダウンロード後に文書が削除されるようなソリューションを好むでしょう。

0

は、メモリにファイルをストリーミングすることはできませんし、バイナリブラウザにストリームを書き込み、この方法は、ファイルが作成されることはありませんそれを削除する必要はありません。

+0

私が言ったように、ファイルはアーカイブから解凍され、ストリームに直接解凍することはできないと思います。 –

+0

確かに、あなたが使用しているコンポーネントに依存するかもしれないと思います。その場合、たとえば "temp"フォルダにディスクに保存する必要がある場合は、特定の年齢のファイルをクリーンアップするWindowsサービスを構築できますか? –

+0

それは私のための選択肢ではありません。 ASP Webサイトは、大きなプロジェクトのほんの一部です。Windowsサービスをインストールして、おそらく使用することのない機能を期待することはできません。 –

1

あなたが削除しようとしているファイルをDeleteFileメソッドと呼んでいるのは、現在何か別のものによってロックされていると思われます。質問は何ですか?含む

試してみてください - あなたのBinaryWrite後

stream.Close() 

。また、ファイルの抽出に使用したコンポーネントと同様のことをしていることを確認してください。コンポーネントがobviouse "close"メソッドを提供していない場合は、それらを参照する変数にNothingを割り当てようとします。

+0

私はstream.Close()を試しましたが、効果はありませんでした。私は以前と同じ404エラーがあり、WScript.Shell.Run()を介して呼び出されるC#プログラムであるため、Zipコンポーネントとは何の関係もないと確信しています。 –

関連する問題