- PR -

[VB2003]Webでのファイルのダウンロードについて

1
投稿者投稿内容
VB小僧
会議室デビュー日: 2006/01/04
投稿数: 2
投稿日時: 2006-01-04 16:34
こんにちは。早速ですが質問があります。
現在WebApplication上のダウンロードボタンを押下することによって、指定ファイルのダウンロードを行うプログラムを製作しているのですが、まったくわかりません。
今回のプログラム作成時の条件として以下のようなものがあります。
------------------------------------------
1.ダウンロード処理はHTTPを利用する。(FTPは使わない)
2.クライアントのダウンロードフォルダは固定とする。(クライアントにダウンロード場所を指定させない)
3.ダウンロード完了時には、ダウンロード完了メッセージをアラートなどを使用して表示する。
------------------------------------------

以上です。

どうしても私の力が及ばない為、皆様のお力を貸してください。
よろしくお願い致します。
VB小僧
会議室デビュー日: 2006/01/04
投稿数: 2
投稿日時: 2006-01-04 16:51
追記:
今回の処理を作成する上で試して見たことを記させていただきます。

・WebClientオブジェクトを作成しダウンロードを行う。
結果:何故だかわかりませんが、クライアント側のダウンロードフォルダに共有
をかけてあげないと処理がうまく実行されませんでした。(権限があり
ませんとエラーが表示されます。)

・下記のようなソースを記述しダウンロードを行いました。
--------------------------------------------------------------
Response.AddHeader("content-disposition", "attachment;filename=TEST.csv")
Response.WriteFile("C:\TEST.csv")
Response.End()
--------------------------------------------------------------
結果:クライアント側にファイルのダウンロード場所を選ばせるメッセージボ
ックスが表示されてしまいました。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-01-04 22:16
お世話になります。

お解かりかとは思いますが、HTTP ダウンロードで
普通にダウンロードさせただけでは、クライアントの保存場所指定は
サーバー側の制御のみでは難しいと思われます。

ですので、VB小僧さんの下記の案を元に、
引用:

VB小僧さんの書き込み (2006-01-04 16:51) より:
・WebClientオブジェクトを作成しダウンロードを行う。
結果:何故だかわかりませんが、クライアント側のダウンロードフォルダに共有
をかけてあげないと処理がうまく実行されませんでした。(権限があり
ませんとエラーが表示されます。)


以下のプログラムで試してみたところ、
ファイルの保存場所を指定するダイアログは表示されずに保存できました。

・サーバー側( ASP.NET ( VB2003 ))
コード:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' ページを初期化するユーザー コードをここに挿入します。
  Dim buf As System.Text.StringBuilder = New System.Text.StringBuilder
  With buf
    .Append("""").Append("a1").Append("""").Append(ControlChars.Tab)
    .Append("""").Append("b1").Append("""").Append(ControlChars.NewLine)
    .Append("""").Append("a2").Append("""").Append(ControlChars.Tab)
    .Append("""").Append("b2").Append("""").Append(ControlChars.NewLine)
  End With

  Response.AddHeader("Content-Disposition", "attachment;filename=" + "hoge.csv")
  Response.ContentType = "application/octet-stream"
  Response.BinaryWrite(System.Text.Encoding.Default.GetBytes(buf.ToString()))
  Response.End()
End Sub



・クライアント側( VB.NET ( VB2003 Windows Application ))
※こちらは、どぼんさんの
http://dobon.net/vb/dotnet/internet/webrequestsavefile.html
を、url と 保存ファイル名を変えただけです。

コード:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  'ダウンロードするファイル
  Dim url As String = "http://localhost/TestWebApp001/WebForm2.aspx"
  '保存先のファイル名
  Dim fileName As String = "D:\hoge" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".csv"

  'WebRequestの作成
  Dim webreq As System.Net.HttpWebRequest = _
    CType(System.Net.WebRequest.Create(url), _
      System.Net.HttpWebRequest)

  'サーバーからの応答を受信するためのWebResponseを取得
  Dim webres As System.Net.HttpWebResponse = _
    CType(webreq.GetResponse(), System.Net.HttpWebResponse)

  '応答データを受信するためのStreamを取得
  Dim strm As System.IO.Stream = webres.GetResponseStream()

  'ファイルに書き込むためのFileStreamを作成
  Dim fs As New System.IO.FileStream(fileName, _
    System.IO.FileMode.Create, System.IO.FileAccess.Write)

  '応答データをファイルに書き込む
  Dim b As Integer
  While True
    b = strm.ReadByte()
    If b = -1 Then Exit While
    fs.WriteByte(Convert.ToByte(b))
  End While

  '閉じる
  fs.Close()
  strm.Close()

  MessageBox.Show("おわりました")
End Sub

1

スキルアップ/キャリアアップ(JOB@IT)