クライアントのファイルダウンロード後にサーバー側のファイルを削除したい

このQ&Aのポイント
  • ASP.NET(VB)を用いてExcelのファイルを操作保存し、保存してあるファイルをクライアントにダウンロードさせた後にExcelのファイルを削除させようとしています。
  • ファイルダウンロード実行する前にファイルが削除されているため、クライアントのダウンロード完了をきっかけに削除するようなコードにしたいです。
  • どなたかご教授願えませんでしょうか。
回答を見る
  • ベストアンサー

クライアントのファイルダウンロード後にサーバー側のファイルを削除したい

お世話になっております。 ASP.NET(VB)を用いてExcelのファイルを操作保存し、保存してあるファイルをクライアントにダウンロードさせた後にExcelのファイルを削除させようとしています。 ですが、ファイルダウンロード実行する前にファイルが削除されています。 感じとしては、IEにダウンロードするように命令するのですが、そのレスポンスが遅くて削除になってしまっている感じがします。 できればクライアントのダウンロード完了をきっかけに削除するようなコードにしたいです。 どなたかご教授願えませんでしょうか。 以下 コード オブジェクトの宣言、処理 (省略) '*ファイル保存ブロック* 開始 '保存ファイル名 xlFilePath = ("C:\0.xls") '保存時の問合せのダイアログを非表示に設定 xlApp.DisplayAlerts = False xlSheet.SaveAs(xlFilePath) xlApp.DisplayAlerts = True Excel終了、オブジェクト解放 (省略) '*excelファイルダウンロードブロック* 開始 Response.Clear() Response.ContentType = "Application / vnd.ms - Excel" Response.AddHeader("Content-Disposition", "attachment;filename=" & "0.xls") Response.WriteFile("c:\0.xls") My.Computer.FileSystem.DeleteFile("c:\0.xls") 処理終了

  • ypepe
  • お礼率40% (2/5)

質問者が選んだベストアンサー

  • ベストアンサー
  • Rel
  • ベストアンサー率70% (7/10)
回答No.1

>できればクライアントのダウンロード完了をきっかけに削除するようなコードにしたいです。 サーバー側からクライアントのダウンロード完了を検知する事って できるのかな? Response.WriteFile("c:\0.xls") ->追加 Response.Flush() <- My.Computer.FileSystem.DeleteFile("c:\0.xls") でいきますでしょうか? 注)未実験ですので、はずした場合はご勘弁を!

ypepe
質問者

お礼

Response.Flush() を使うことで無事解決することができました。ありがとうございました。 すっかり抜けていました。お世話になりました。

関連するQ&A

  • 任意の所へファイル保存

    以前ファイル保存の質問で Dim xlFilePath As String = "c:\Test1.xls" xlApp.DisplayAlerts = False xlSheet.SaveAs(xlFilePath) xlApp.DisplayAlerts = True を教えて頂きましたが、今回はCドライブ決め打ちではなく、任意に変更したいのですが、どう書けば良いのでしょうか

  • ファイルの存在チェック クライアント側

    皆さん、いつもお世話になっております。 次の事を実行したいのですが、どうしたらいいのかご存知でしたらご教授いただけると幸いです。 (やりたい事) 1.クライアントのファイル存在チェックしたい。 *実行前の処理として、クライアントのexcelファイルの存在チェック をして、  a)不存在の時は、サーバーからexcelファイルをダウンロード。 b)既存在のときは何もしない。 2.上記との関連ですが、何かボタンを押した時にクライアントのexcel を実行する。 --------------------------------------------------------------- 以上2点ですが、fopen()でやってもサーバーの存在チェックになってしまい、クライアント側をチェック出来ませんでした。何かアドバイスを下さい。 以下、実行サンプルです。 <?php $file = "test.xls"; if(!fopen($file, "r")) { header("location: http://xxxx.com/test/$file"); } ?> --------------------------------------------- 1.クライアントのファイル存在チェック 2.クライアントのexcel実行 簡単そうでしたが、できませんでした。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • VBクライアントからのサーバーファイルダウンロード

    ファイルをダウンロードするシステム構築で困っております。 サーバーに保存しているPDFファイルをクライアントからダウンロード し、Acrobatで開きたいのですが、ログオンやアプリケーション上での 権限認証のロジックを経由した後にダウンロードさせたいため、http やftpで公開することができません。 また、VB 6.0から開く必要があります。 現在は、 ・サーバー(ASP)側でダウンロードのページを用意する。(後述) ・クライアント(VB6)で用意したページを開く。 ということでファイルのダウンロードとAcrobatの動作はできていますが、 ・ブラウザの画面を閉じることができない。 ・サイトのURLが残る。 ということで問題があります。 サイトのURLを表示せずにダウンロードを行い、ダウンロード後は画面を 閉じるか、ウインドウを表示せずに同一の機能を満たす方法はないでしょ うか? ■実行環境 サーバー Win 2003 SP1 + ASP クライアント Win XP SP2 + VB 6.0 + Internet Explore 6.0 ■サーバーのスクリプト(http://server/download.asp) <% '' ログオン名の取得やログオン名に応じたアクセス制御 '' はこの部分に追加 Dim objStream Dim strFilePath Const adTypeBinary = 1 Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open strFilePath = "d:\folder\pdffile.pdf" Response.AddHeader "Content-Disposition", _ "attachment; filename=pdffile.pdf" objStream.Type = adTypeBinary objStream.LoadFromFile strFilePath Response.BinaryWrite objStream.Read objStream = null %> ■VB6での起動 ret = ShellExecute(hwnd, "Open", "http://server/download.asp", _ "", "", vbHide) よいアドバイスございましたらよろしくお願い致します。

  • VB2005 で立ち上がった状態のEXCELファイルからデータ読込みだけしたいのですが

    どなた様かお助けください。VB2005を勉強中の素人です。 既に立ち上げた状態のEXCELファイルから単純に特定セルの数値をVBのラベルに読み取りたいだけなのですが、ネットや書籍にてVBでのEXCEL読込み方法について調べたのですが、どこの情報をみても、EXCELの立ち上げとクローズがセットになっており、既にEXCELファイルを開いた状態からでは2重起動となり、読み込みだけの仕方が分かりません。一応下記でファイルのオープンからのクローズまでができるようですが、[open]のところを取り除くとエラーになってしまいます。 ファイル名とセルだけが私の指定したい条件なのですが、なにか単純な読み取り方法はないでしょうか? というか私がアホすぎるのも原因だとは思いますが、ちょっとEXCEL情報読み込ませたかっただけなのにもう2日も悩んでおり、こんなに難しいとは思いませんでした。VBって初心者向けとかいわれていますけど6.0やら.netやらと情報が分散していて何するにも一苦労ですね。  いろいろ調べて下記のコードで最低限読み込みはできるようになりました。(短いコードが好きなので宣言とかはかなり除去しているからかな?時々表示されるセルデータもおかしくなります) EXCELオブジェクトライブラリの参照は済です。 ファイルのオープンとクローズを除去し最終的には立ち上げっぱなしのEXCELから単純な読込み(のみ)を1秒に1回程度繰り返してラベル表示を随時更新するのが目的です。ご助言お願いします。 Dim xlApp As New Excel.Application Dim xlFilePath As String = "C:\あつし\sample.xls" label1.Text = xlApp.Workbooks.Open(xlFilePath).Worksheets.Item(1).Range("A3").Value() xlApp.Quit()

  • EXCELファイルからの値取得に関して

    環境:Visual Basic 2008 教えて下さい。 画面上から2つのEXCELファイルを指定し、1回の処理でその2つの EXCELからそれぞれ値を取得したいと考えています。 その為、以下のような記述をしましたが、2回目の値取得のところで "オブジェクト参照がオブジェクト インスタンスに設定されていません。" というエラーメッセージとなってしまいます。 1つのファイルから取得する事は経験ありましたが、同時に2回は初めてで ある為、記述方法が正しいのか、、、 どのように記述したら良いかを教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。 《記述内容》 'EXCELファイルを開く Dim xlFilePath As String = ofd1.FileName '起動時の処理 Dim xlApp As Object xlApp = CreateObject("Excel.Application") Dim xlBooks As Object = xlApp.Workbooks Dim xlBook As Object = xlBooks.Open(xlFilePath) '現シート数 Dim S_COUNT As Integer = xlBook.Worksheets.Count Dim xlSheets As Object = xlBook.Worksheets Dim xlSheet As Object = CType(xlSheets.Item(1), Object) '現シート数 S_COUNT = xlBook.Worksheets.Count Dim R_名称 As String R_名称 = "" R_名称 = xlSheet.Cells(1, 1).Value 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'Excel のプロセス終了 xlApp.DisplayAlerts = False xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect() 'のEXCELファイルを開く Dim xlFilePath2 As String = ofd2.FileName '起動時の処理 Dim xlApp2 As Object xlApp2 = CreateObject("Excel.Application") Dim xlBooks2 As Object = xlApp2.Workbooks Dim xlBook2 As Object = xlBooks2.Open(xlFilePath2) '現シート数 Dim S_COUNT2 As Integer = xlBook2.Worksheets.Count Dim xlSheets2 As Object = xlBook2.Worksheets Dim xlSheet2 As Object = CType(xlSheets2.Item(1), Object) '現シート数 S_COUNT = xlBook2.Worksheets.Count Dim R_番号 As String R_番号 = "" R_番号 = xlSheet2.Cells(I_COUNT2, 1).Value 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'Excel のプロセス終了 xlApp.DisplayAlerts = False xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect()

  • Excelファイルをダウンロード

    Webページ上のあるボタンを押した時、サーバー上にExcelファイルを作成し、そのファイルをそのままクライアントにダウンロードするプログラムをつくろうとしています。その時、ダウンロードダイアログを表示させ、クライアントが任意の場所に保存できるようにしようと思っています。とりあえずファイルをダウンロードするクラスを下記のように作りました。 public class download { public static final int EOF=-1; public void downloader(HttpServletResponse res){ try { String fileName = "testExcel1.xls"; String CONTENT_TYPE = "application/atom"; res.setContentType(CONTENT_TYPE); res.setHeader("Content-Disposition", "filename=\""+ fileName +"\""); URL urlObj=new URL("サーバーアドレス:8080/DB/testExcel.xls"); InputStream in = urlObj.openStream(); FileOutputStream(new File("testExcel1.xls")); BufferedOutputStream bout= new BufferedOutputStream(res.getOutputStream()); int c; while( (c = in.read()) != EOF ) { bout.write(c); } bout.flush(); in.close(); } catch (Exception e ) { e.printStackTrace(); } } } このまま実行するとダウンロードダイアログは表示されず、Excelファイルの内容がクライアントのブラウザ上に表示されてしまします。どうしたらダウンロードダイアログが表示されるようになるでしょうか。アドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • xlsファイルをダウンロードさせる方法

    ホームページを作成しているのですが、エクセルのxlsをダウンロードさせるソースの書き方がわからず、悩んでいます。 <a href="test.xls">xlsファイル</a> これを左クリックすると、エクセルファイルが開いてしまいます。 右クリックしてメニューの中から「対象をファイルに保存」ならもちろんダウンロードできますが。 できたら左クリックでやりたいです。 EXEとかLZHなら保存するか、開くか。 ウィンドウが出てきて聞いてくれますよね? ああいう形にしたいのですが。 拡張子をxlsからLZH等に変更すれば可能ですが、xlsのままでやりたいのです。 御存知の方いらっしゃいましたら、助けて下さい。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • ダウンロードしたファイルを開くとエラーがでる!

    お世話になっております。 WindowsXPです。 とあるファイル(CSV)をダウンロードします。 「ファイルのダウンロード」という画面→「保存」クリック (ちなみに デスクトップに保存します) 「ダウンロードの完了」という画面になり、「ファイルを開く」ボタンを クリックすると、 エラー画面になります。 「'C:\Documents.xls'が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください。[ファイル]メニューの最近使用したファイルの一覧からファイルを開こうとしている場合は、そのファイルの名前が変更されてないこと、移動または削除されてないことを確認してください。」 という画面です。 保存したのは、デスクトップ画面なのに、'C:\Documents.xls'と認識されているのです。OKボタンをクリックすると、また今度は別な場所を見ているよう なファイル名で~が見つかりません・・・とまた同じ文章でエラーがでます。 またOKボタンをクリックすると、やっとファイルが開いて見えます。 結局ファイルは開けるのですが、このエラーが気になります。 どうしたらよいでしょうか

  • パスワード付のエクセルファイルをアクセスから開く方

    アクセスからエクセルのファイルを開きたいのですがうまくできません。 エクセルにはパスワードがかかっています。 なので Dim xlApp As Object Dim xlWbk As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlWbk = xlApp.Workbooks.Open("C:\2010.xlsx", , , , Password:="0000") Set xlApp = Nothing としたのですが、エクセルファイルが立ち上がりパスワード入力画面が表示されます。 , , , , Password:="0000" が無視されているようです。 パスワード付のエクセルファイルをアクセスから開く方法をご教授ください。

  • 「もし既にファイルを開いているなら、開かない」

    おはようございます。 accessからExcelのブックを開く処理をしています。 VBAでファイルを開く時に、「もし既にファイルを開いているなら、開かない」 という行為をしたいのですが、どのようにすればいいでしょうか? *************************************************************************** Sub サンプル() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\【Excel】\料理.xlsm") xlApp.Visible = True'ファイルを開く?表示する? Set xlApp = Nothing Set xlBook = Nothing End Sub *************************************************************************** このコードの、 xlApp.Visible = Trueを、 if xlBook がまだ開いてない then xlApp.Visible = True Else End If のような事がしたいのですが、可能でしょうか? ご教授よろしくお願いします。

専門家に質問してみよう