2011-01-01 17 views
1

私の目標は、いくつかのフォーム入力を受け取り、特定のボタンをクリックするとすべての要約をダウンロードするようにユーザーに促すことです。私はファイルがダウンロードされるとファイルを必要としないので、データが直接ユーザーにストリーミングされるソリューションを提供したいと考えています。私の現在の解決策では、ユーザーにダウンロードを促すことさえできません。誰かが間違っていることを指摘できますか?動的に生成されたファイルをダウンロードできるようにする

私はwebmethodとしてラップされているので、特定のものにアクセスできるように_Defaultページクラスの定義を追加する必要がありました。

Public Shared Sub SaveText(ByVal Text As String) 
    Dim d As New _Default 
    Dim FileName As String = System.IO.Path.GetRandomFileName() 

    Using sw As New System.IO.StreamWriter(d.Server.MapPath(FileName + ".txt")) 
     sw.WriteLine(Text) 
     sw.Close() 
    End Using 

    Dim fs As System.IO.FileStream = Nothing 


    fs = System.IO.File.Open(d.Server.MapPath(FileName + ".txt"), System.IO.FileMode.Open) 
    Dim btFile(fs.Length) As Byte 
    fs.Read(btFile, 0, fs.Length) 
    fs.Close() 

    With HttpContext.Current.Response 
     .AddHeader("Content-disposition", "attachment;filename=output.txt") 
     .AddHeader("Content-Length", btFile.Length.ToString) 
     .ContentType = "application/octet-stream" 
     .BinaryWrite(btFile) 
     .End() 
    End With 
End Sub 

申し訳ありません申し訳ありませんが、これは以前には言及されていませんが、WebメソッドがAJAXリクエストによって呼び出されています。

答えて

4

ファイルシステムに書き込む代わりに、を使用してデータベースからデータを保持するか、またはResponse.OutputStreamに直接書き込むことをお勧めします。

Content-Dispositionヘッダーが正しいようですが、テキストファイルの正しいMIMEタイプ(ContentType)はtext/plainです。

+0

に合うジェネリックハンドラ(* .ashx)ファイルのような音?私はすべてを歩いてきました。それはうまく動いているようです。 – Radu

+1

@Radu - あなたが省略したかなりの詳細です。 AJAXの応答はおそらくこれらのヘッダーが無視される原因になるでしょう。 – Oded

+1

@Radu - リンクされたスレッドのアプローチは有望です(新しいダウンロードを生成するためにIFrameを作成する)。 http://www.sencha.com/forum/showthread.php?8931-save-as-dialog-with-ajax&p=44739#post44739およびhttp://www.west-wind.com/weblog/posts/76293。 aspx#106904 – Oded

0

は、私は、AJAXリクエスト(jqueryの)を介して、それを呼んでいるという事実が表示され、保存ダイアログを防ぐことができる完全にここに

+0

おそらく理想的ですが、これはこのアプリケーションの特定のインスタンスでのみ使用されます。 – Radu

+0

私はあなたのポイントを得ることができません。特定の理由で汎用ハンドラを作成します。写真のサムネイルを表示したり、データベースから特定のテーブルの画像を取得したりすることができます。ジェネリックハンドラもこのような状況に適していないのはなぜですか? – citronas

+0

私はそれが合っていると言っていますが、それは複数回使用されていないので必要ではありません。私はポイントを逃していますか? – Radu

関連する問題