相关疑难解决方法(0)

HTTP响应头中内容处置的使用

我发现以下asp.net代码在从数据库提供文件时非常有用:

Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Run Code Online (Sandbox Code Playgroud)

这允许用户将文件保存到他们的计算机,然后决定如何使用它,而不是尝试使用该文件的浏览器.

使用内容处置响应标头还可以做些什么?

http httpresponse httpwebresponse content-disposition http-headers

122
推荐指数
4
解决办法
21万
查看次数

在具有名称的浏览器中使用ASP.NET MVC FileContentResult流文件?

有没有办法在浏览器中使用具有特定名称的ASP.NET MVC FileContentResult来流式传输文件?

我注意到你可以有一个FileDialog(打开/保存),或者你可以在浏览器窗口中流式传输文件,但是当你尝试保存文件时它会使用ActionName.

我有以下场景:

byte[] contents = DocumentServiceInstance.CreateDocument(orderId, EPrintTypes.Quote);
result = File(contents, "application/pdf", String.Format("Quote{0}.pdf", orderId));
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我可以流式传输字节,但是给用户提供了一个OPEN/SAVE文件对话框.我想在浏览器窗口中实际传输此文件.

如果我只使用FilePathResult,它会在浏览器窗口中显示该文件,但是当我单击"保存"按钮将文件保存为PDF时,它会显示操作名称作为文件的名称.

有没有遇到过这个?

asp.net-mvc filecontentresult fileresult

58
推荐指数
5
解决办法
11万
查看次数

从Action写入输出流

出于某些奇怪的原因,我想从控制器操作直接将HTML写入Response流.(我理解MVC分离,但这是一个特例.)

我可以直接写入HttpResponse流吗?在这种情况下,IView控制器操作应该返回哪个对象?我可以退回'null'吗?

asp.net-mvc

27
推荐指数
5
解决办法
3万
查看次数

使用MVC 3在浏览器选项卡中打开PDF结果

我正在使用ASP.NET MVC 3.我有一个控制器动作,返回一个PDF文件,如下所示:

Public Class ReportController
    ...
    Function Generate(id As Integer) As ActionResult
        ...
        Return File(output, "application/pdf", "something.pdf")
        ' "output" is a memory stream
    End Function
Run Code Online (Sandbox Code Playgroud)

代码有效,但Firefox不会在选项卡中显示结果,结果可以使用Adobe Reader下载或打开.

我知道Firefox可以在选项卡中显示PDF,因为我可以谷歌一些PDF,点击链接,PDF将在选项卡中打开.

如何设置操作以便PDF将在选项卡中打开?

pdf asp.net-mvc-3

13
推荐指数
1
解决办法
2万
查看次数

无缓冲输出非常慢

我使用中概述的方法从数据库生成一个非常大的.csv文件

/sf/answers/941935361/

它工作正常,达到一定程度.当导出的文件太大时,我会得到一个OutOfMemoryException.

如果我通过修改这样的代码来关闭输出缓冲:

protected override void WriteFile(System.Web.HttpResponseBase response)
{
    response.BufferOutput = false; // <--- Added this
    this.Content(response.OutputStream);
}
Run Code Online (Sandbox Code Playgroud)

文件下载完成.但是,它比启用输出缓冲时慢几个数量级(在localhost上测量缓冲为true/false的同一文件).

我知道这样做比较慢,但为什么它会慢慢相对爬行呢?我有什么办法可以提高处理速度吗?

UPDATE

也可以选择使用注释中建议的File(Stream stream,String contentType).但是,我不确定如何创建stream.数据是基于数据库查询动态组合的,而MemoryStream将耗尽连续的物理内存.欢迎提出建议.

更新2

在评论中建议,交替从数据库中读取并写入流会导致性能下降.我修改了代码以在单独的线程中执行流写入(使用生产者/消费者模式).性能没有明显差异.

asp.net-mvc asp.net-mvc-4

11
推荐指数
1
解决办法
3828
查看次数

如何在新选项卡或窗口中打开 PDF 文件而不是使用 C# 和 ASP.NET MVC 下载它?

我有发票屏幕,在此屏幕中有可用的订单数量,因此当我们创建发票时,我们需要填写一张表格,所以我想要的解决方案是当我提交此发票表格或单击此提交按钮时 pdf 应以新格式打开标签。我想向您澄清,我们不会将此 pdf 保存在任何地方。

<div class="modal-footer custom-no-top-border">
      <input type="submit" class="btn btn-primary" id="createdata" value="@T("Admin.Common.Create")" />
</div>
Run Code Online (Sandbox Code Playgroud)

当我单击此按钮时,pdf 应在新选项卡中打开。

这是pdf代码

 [HttpPost]
 public virtual ActionResult PdfInvoice(int customerOrderselectedId)
 {
        var customerOrder = _customerOrderService.GetCustomerOrderById(customerOrderselectedId);

        var customerOrders = new List<DD_CustomerOrder>();

        customerOrders.Add(customerOrder);
        byte[] bytes;

        using (var stream = new MemoryStream())
        {
            _customerOrderPdfService.PrintInvoicePdf(stream, customerOrders);
            bytes = stream.ToArray();
        }

        return File(bytes, MimeTypes.ApplicationPdf, string.Format("order_{0}.pdf", customerOrder.Id));
    }
Run Code Online (Sandbox Code Playgroud)

当我单击按钮时,此代码会下载 pdf。

谢谢 !!

c# pdf asp.net-mvc

3
推荐指数
1
解决办法
1万
查看次数