2

作成が完了したらユーザーがダウンロードできるようにするCSVファイルを生成する簡単なWebページがあります。

これが私の状況の要約です:

  1. CSVファイルは、メモリ内またはディスク上に作成できます。私には関係ありません。
  2. CSVファイルの送信が完了したら、それをディスクに残したくありません。
  3. Response.WriteFile、.TransmitFile、.BinaryWrite、.Writeを使用してさまざまなコードを試しましたが、役に立ちませんでした。
  4. 「役に立たない」とは、CSVファイルを送信するのではなく、CSVファイルの内容と現在のページ全体を送信することを意味します。
  5. 本質的に同じことをしている別のページがありますが、PDFファイルがzipファイルにバンドルされており、問題なく動作するため、私は本当に混乱しています。
  6. 私は実際にはWindowsデスクトップ開発者ですが、Web開発者になろうとしています。(これがばかげた質問または初心者の質問である場合は申し訳ありません。)

PDFファイルを含む.zipを送信するために作業しているコードは次のとおりです。

Protected Sub SaveReportsButton_Click(sender As Object, e As EventArgs) Handles SaveReportsButton.Click
    '' The .zip file is created elsewhere
    Dim fullPath As String = Server.MapPath("~/Reports/" & Session.SessionID & ".zip")
    Response.ContentType = "APPLICATION/OCTET-STREAM"
    Dim fileToDownload As New FileInfo(fullPath)
    Dim disHeader As String = "Attachment; Filename=""Reports.zip"""
    Response.AppendHeader("Content-Disposition", disHeader)
    Response.Flush()
    Response.WriteFile(fileToDownload.FullName)
End Sub

CSVファイルを送信するために動作させようとしているコードは次のとおりです。

Protected Sub saveButton_Click(sender As Object, e As System.EventArgs) Handles SaveOutput.Click
    Dim list As List(Of String) = {"000000000", "000000000", "000000000"}.ToList()
    Dim sb As New Text.StringBuilder
    For i As Integer = 0 To list.Count - 1
        Dim str As String = list(i)
        sb.Append(str)
        If i < list.Count - 1 Then
            sb.Append(",")
        End If
    Next
    Dim dirPath As String = Server.MapPath("~/Output/" & Session.SessionID)
    IO.Directory.CreateDirectory(dirPath)
    Dim filePath As String = Server.MapPath("~/Output/" & Session.SessionID & "/Output.csv")
    IO.File.WriteAllText(filePath, sb.ToString())
    Response.ContentType = "text/csv"
    Dim disHeader As String = "Attachment; Filename=""Output.csv"""
    Response.AppendHeader("Content-Disposition", disHeader)
    Response.Flush()
    Response.WriteFile(filePath)
End Sub

私が言ったように、このページで作成されてサーバーに残されるファイルを制限したいので、CSVファイルを使い終わったら削除したいと思います。

何か助けはありますか?

ありがとう!!!

4

2 に答える 2

1

Response.WriteとResponse.Endでこれを試してください

Protected Sub saveButton_Click(sender As Object, e As System.EventArgs) Handles SaveOutput.Click
    Dim list As List(Of String) = {"000000000", "000000000", "000000000"}.ToList()
    Dim sb As New Text.StringBuilder
    For i As Integer = 0 To list.Count - 1
        Dim str As String = list(i)
        sb.Append(str)
        If i < list.Count - 1 Then
            sb.Append(",")
        End If
    Next
    Response.Clear()
    Response.ContentType = "text/csv"
    Dim disHeader As String = "Attachment; Filename=""Output.csv"""
    Response.AppendHeader("Content-Disposition", disHeader)
    Response.Flush()
    Response.Write(sb.ToString())
    Response.End()
End Sub
于 2012-03-12T16:13:31.063 に答える
0

このファイルを保存する必要はまったくありません。応答を返してみませんか。それだけです。ファイルを作成しない場合は、ファイルを削除することを心配する必要はありません。

コンテンツはその場で作成されます。

アップデート

応答ヘッダー「content-disposition」を設定してから、Response.OutputStreamに書き込みます

応答ヘッダーの詳細については、http://www.jtricks.com/bits/content_disposition.htmlをご覧ください。

C#コードに関しては、そのようなことをしてください

Response.AddHeader("content-disposition", string.Format("filename={0}", fileName));
using (var myWriter = new SOMETHING_WHICH_CAN_WRITE_TO_STREAM())
{
    myWriter.Write(Response.OutputStream);
}

それが役に立てば幸い

于 2012-03-12T16:15:11.847 に答える