ASPでバイナリーファイルをダウンロードする方法とは?

このQ&Aのポイント
  • ASPでファイルをダウンロードするスクリプトを使用することで、バイナリーファイルをダウンロードできます。
  • 例えば、Response.ContentTypeプロパティを設定して、ファイルのコンテンツタイプを指定します。
  • また、ADODB.Streamオブジェクトを使用してファイルを読み込み、Response.BinaryWriteメソッドを使用してバイナリーデータを出力します。
回答を見る
  • ベストアンサー

ASPでバイナリーファイルをダウンロードさせるには?

ASPでファイルをダウンロードするスクリプトで、以下の様な例がMicrosoftのページに 掲載されているのですが、 <% 'Set the content type to the specific type that you are sending. Response.ContentType = "application/x-msexcel" Const adTypeBinary = 1 Dim strFilePath strFilePath = "C:\ExcelFiles\Excel1.xls" 'This is the path to the file on disk. Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open objStream.Type = adTypeBinary objStream.LoadFromFile strFilePath Response.BinaryWrite objStream.Read objStream.Close Set objStream = Nothing %> 上記の中の"strFilePath "の部分を、サーバーローカルのハードディスク以外に 出来る方法というのはあるのでしょうか? サーバーのオブジェクトとして、 Set objStream = Server.CreateObject("ADODB.Stream") をセットしているので、この方法では無理だとは思うのですが、同じようにバイナリー ファイル(特に有名なアプリケーションに関連付けされてしまっている拡張子を持つ もの)をダウンロードダイアログを表示して、スクリプトのあるサーバー以外のサーバー 上にあるファイルを明示的にダウンロードできるようにしたいのですが。。。

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

  • ベストアンサー
  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

ダウンロードダイアログを出させるには、Response.ContentType に、なんか適当なやつをセットしておくといけます。application/NormalFile とか。 他のサーバのファイルをダウンロードさせたければ、このASP自信でとってきてレスポンスに返してやればよいでしょう。一番簡単なのは、前もってダウンロードしておけばいいし、動的に変わるのであれば、他の方法でGETすればよいと思います。私は参考URLに示すDLLのW3Getというコマンドで取ってきてます。

参考URL:
http://www.hi-ho.ne.jp/babaq/basp21.html
Rubellite
質問者

補足

ご回答ありがとうございます。ダウンロードさせたいファイルは.wmvファイルになりますので、MIMEの設定と質問に書いたスクリプトだけでは不十分なのですが、その不十分なところは以前別の質問で解決いたしました。 今回のご回答を参考に致しますと、 1.スクリプトを実行するサーバーが、まずBASP21のコンポーネントに ある、W3getの機能を使い、自分のローカルドライブ内に外部にある ファイルをダウンロードし、保存する。 2.保存したファイルを送り出すためのスクリプトに、外部にあるファイ ルをダウンロード完了後Redirectさせるか、外部のファイルを取り込んだ スクリプトのうしろに、続けて今度は送り出すためのスクリプトを実行さ せる。 3.ユーザーに送信完了後、ダウンロードしてきたファイルを削除する。 という手順でよろしいでしょうか? この場合、3番目の「ファイルを削除する」というタイミングは、 「ユーザーのダウンロード完了後である」必要がありますよね? その 判断はどうすれば出来るのでしょうか?

関連するQ&A

  • ファイルダウンロードの開くで、CSVファイルが開けない

    表記の件についてかなり困っています。 教えてください。 【環境】  Windows2000 SP4 + ASP 【内容】  現在CSVファイルをダウンロードする仕組みをASPで作成しています。 とりあえず、ダウンロードダイアログがでてくるところまではでき、保存ボタンでも正常に保存できるところまではできたのですが、開くボタンをクリックすると、EXCEL(CSVをEXCELに関連付けしているため)が起動された後に、 ”出力ファイル名[1].csv”が見つかりません。という エラーとなり表示されません。 この原因は何なのでしょうか? 宜しくお願いします。 【ロジック】 ダウンロードロジックは以下のようにしています。 Response.ContentType = "application/octet-stream" Response.AddHeader "content-disposition","attachment; filename=光彩.csv" strFilePath = "C:\Inetpub\wwwroot\CoreSt\光彩.csv" Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open objStream.Type = adTypeBinary objStream.LoadFromFile strFilePath Response.BinaryWrite objStream.Read objStream.Close Set objStream = Nothing

  • 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) よいアドバイスございましたらよろしくお願い致します。

  • BASP21によるbase64のデコードについて

    base64でエンコードされた画像ファイルを表示したいと思っています。 basp21でデコードして、BinaryWriteで書き出したんですがうまく表示できません。 CAPICOMを使った場合は正しく表示されます。 basp21でデコードする際になにか処理をはさむ必要があるのでしょうか? 以下作成したサンプルソースです。 ---ソース------------------------------------------ <%@ Language="VBScript" %> <% Set Stream = Server.CreateObject("ADODB.Stream") Set CAPIUtil = Server.CreateObject( "CAPICOM.Utilities" ) Set objBasp = Server.CreateObject("basp21") strEncoded = "/9j/kL・・base64でエンコードされたJpegファイル" strDecoded = CAPIUtil.Base64Decode( strEncoded ) strDecoded2 = objBasp.Base64(strEncoded, 1) Response.ContentType = "image/jpeg" ' Response.BinaryWrite strDecoded ' Response.BinaryWrite strDecoded2 %> ---------------------------------------------ここまで----- 以上よろしくお願いいたします。

  • ファイルのストーリーム配布時のファイルサイズ

    IIS6.0 IE6or7 ASP(vbScript) こんにちは。よろしくお願いします. エクセルやワードファイルを直接URLで叩くと ブラウザの中で開いてしまいます. それを避けるために下記のようにしてファイルをストリームとして渡すようにし、問題を回避しようとしました. しかし、ファイルサイズが小さい場合は問題なくDLできるのですが、 1Mを越えたあたりから一瞬でエラー画面になりDLできず、困っています. IISの設定なのか、よくわかりません。 下記以外の方法でも構いませんので、解決方法等ありましたら 御教示願います. Response.AddHeader "Content-Disposition" , " attachment; ilename=" & FileName Response.ContentType = "application/octet-stream;name=" & FileName Set obj = CreateObject("ADODB.Stream") obj.Open obj.Type = 1 obj.LoadFromFile("フォルダパス" & "\" & FileName) Response.BinaryWrite obj.Read() obj.Close

  • VBSで特定の文字で始まるファイルを開く

    VBSで"ADODB.Stream"オブジェクトを作成した場合、 LoadFromFileで開くファイルを指定するものだと思いますが、 このとき、特定の文字で始まるファイルを開く場合 どのように指定すれば良いのでしょうか? Set iSt = CreateObject("ADODB.Stream") ist.Charset = "UTF-16BE" ist.Open ist.LoadFromFile(?) オブジェクトがFileSystemObjectであれば *を使用してファイルを開くことができたのですが、 文字コードが"UTF-16BE"であるため ADODB.Streamを使うよう制限されています。

  • バイナリ読み込み書き込みについて

    Set objReadADO = WScript.CreateObject("ADODB.Stream") If Err.Number = 0 Then objReadADO.Open objReadADO.Type = 2 objReadADO.LoadFromFile "C:\old.xls" End If Set objWriteADO = WScript.CreateObject("ADODB.Stream") If Err.Number = 0 Then objWriteADO.Open objWriteADO.Type = 2 End If strReadDate = objReadADO.Read(-1) If InStr(1, strReadDate, "abc", 0) > 0 Then ← 1 strReadDate = Replace(strReadDate, "abc", "xyz") ← 2 End If objWriteADO.Write strReadDate objWriteADO.SaveToFile "C:\new.xls" objReadADO.Close objWriteADO.Close Excelをバイナリで読み込み、特定の文字があった場合に置き換えを行い別の名前でExcelを出力したいと思っています。出力自体は出来たのですが、変換がされません… ADODB.Streamは初心者なためどうしてよいかわかりません。 どのようにすればできるのでしょうか? よろしくお願いします。

  • ASPでCSVファイルを作成しダウンロードさせる

    ASPファイルで、動的にCSVファイルを作成し、クライアントにダウンロードさせたいのですが、実際には、ファイルは作成せずに、ASPで直接、CSVフォーマットのファイルをダウンロードさせているように振舞わせることはできないでしょうか? 手順 クライアント        サーバー あるURL(A.ASP)にアクセス              A.ASPのスクリプトでCSVフォーマットを作成              クライアントに送信(多分、Response.Writeで) ダウンロードダイアログが開く 「A.CSVをダウンロードしますか?」 のような感じ ダウンロード、またはExcelが開く というようなイメージです。 CSVファイルを作ってしまうと、複数のユーザーからほぼ同時に要求があった場合、望むCSVにならない可能性があり、また、毎回ファイル名を変えると、Webサーバー上にCSVファイルが沢山できてしまうため、何とかこの方法でやりたいのですが、何かよい方法はありませんでしょうか? ちなみに次のようなASPファイルをしてみましたが、うまくいきません。 <% Response.Content-Type="application/vnd.ms-excel" Response.Write "1,2" & vbNewLine Response.Write "3,4" & vbNewLine %> また、「vnd.ms-excel」を「oct-stream」でもだめでした。 何かよい知恵をお貸しください。

  • バイナリデータの表示

    ASP初心者です。 下記のソースの表示結果を[表示]→[ソース]で[ファイル保存] を使い"after_test.bin"として保存しました。 バイナリエディターで元の"test.bin"と結果の"after_test.bin"を見比べると 1.'20'が'00'に変わってしまう 2.'0D'→'0D0A'になり1バイトずれる(BinaryWrite?) この問題を回避するには、どうしたら良いのでしょうか?宜しくご指導願います。 '-------------------------------------------- Dim bobj Dim barray Set bobj = Server.CreateObject("basp21") barray = bobj.BinaryRead(Server.MapPath(test & ".bin") Response.BinaryWrite barray Set bobj = Nothing Call Response.End

  • CRLFをLFに変換したい

    テキストファイルを 1)SJIS → UTF-8 2)CRLF → LF に変換させたいのですが、1)はうまく出来たのですが、 2)がうまくいかず困っています Set Src = CreateObject("ADODB.Stream") Src.Open Src.Type = 2 Src.Charset = "Shift_JIS" Src.LoadFromFile "test.txt" Set Dst = CreateObject("ADODB.Stream") Dst.Open Dst.Type = 2 Dst.Charset = "UTF-8" Dst.LineSeparator=10 Src.CopyTo Dst Src.Close Dst.SaveToFile "utf-out.txt", 2 Dst.Close 改行コードが何も変化しません。 どうすればよいか教えてください。 ADODBではじめからファイルに書き込んでいく方法でもかまいません。

  • IIS7.0 と ASP を使ってMDBファイルを参照したい

    みなさんこんばんわ。 IIS7.0 と ASP を使ってMDBファイルを参照したいのですが、 エラーが出て、ページを開くことが出来ません。 エラー表示は HTTP500内部サーバーエラー と表示されます。 エラーでとまる部分は以下コードの Point002 と Point003 の間です。 Response.Write "<p>Point001" Set Objconn = Server.CreateObject("ADODB.Connection") Response.Write "<p>Point002" Objconn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath(DB_Pass) Response.Write "<p>Point003" StrSQL="select * from " & Table_Name Set Objrs = Server.CreateObject("ADODB.Recordset") Response.Write "<p>Point004" Objrs.Open StrSQL, ObjConn Response.Write "<p>Point005" ODBC を使う方法もあるようですが今回は ODBC を使わないでMDBファイルを参照したいのです。 よろしくお願いします。 環境 OS→Windows Vista Ultimate Access→Access2000 IIS→IIS7.0 使用言語→VBScript

専門家に質問してみよう