0

在我的网站上,我有一个客户之前下的订单列表,每个都可以查看。我试图让用户下载一个提供每个订单详细信息的文件,这样当他们在订单页面上单击“下载”时,他们将收到一个包含订单详细信息的文件。我有创建文件的代码,但我不知道如何提供它。这是我到目前为止所拥有的:

var csv = new StringBuilder();  
csv.Append("Customer,Bill To Name,Ship To Name,Patient,Order#,Order Date,Line,Item#,Item Description,Qty,UOM,Price,Ext Price,Carrier,Notes,Purchase Order");
foreach (var cartLine in model.Lines) {
    var newLine = string.Format(.....)
    csv.AppendLine(newLine);
}
System.IO.File.AppendAllText(filepath, csv.ToString());

所以我的文件漂浮在服务器上,但我该怎么处理它呢?我也不希望这些文件永远占用空间,我希望它们在客户端收到它们后立即从服务器中删除。

编辑:我正在使用 MVC

4

2 回答 2

4

您可以将文件作为流从内存中返回。您不需要将其保存在服务器的文件系统中。您能否提供更多有关您使用哪种服务器技术的背景信息,以便我可以为您提供具体的代码。在 MVC 中,您可以通过以下方式执行此操作:

var bytes = Encoding.UTF8.GetBytes(csv.ToString());
return this.File(bytes, "text/csv")

Return File 将内容作为字节数组或流和媒体类型告诉浏览器您要返回的文件类型。

于 2015-11-10T20:04:42.113 回答
0

如果您使用默认的 asp.net 堆栈(Controller/ApiController),请通过返回HttpResponseMessage. 从您的 csv 字符串或其他任何内容中获取流,将Content属性设置为您的流;相应地更改内容类型标题,你就完成了。

例子:

public HttpResponseMessage GetCsv()
{
    var csv = "whatever goes here";
    var stream = new MemoryStream(Encoding.UTF8.GetBytes(csv));
    var message = new HttpResponseMessage()
    {
        Content = new StreamContent(stream)
    };
    message.Headers.Add("Content-type", "text/csv");
    return message;
}
于 2015-11-10T20:10:51.567 回答