相关疑难解决方法(0)

将文件返回到ASP.NET MVC中的查看/下载

我在ASP.NET MVC中将存储在数据库中的文件发送回用户时遇到问题.我想要的是一个列出两个链接的视图,一个用于查看文件并让发送给浏览器的mimetype确定应该如何处理,另一个用于强制下载.

如果我选择查看调用的文件SomeRandomFile.bak并且浏览器没有关联的程序来打开这种类型的文件,那么我没有问题,它默认为下载行为.但是,如果我选择查看调用的文件,SomeRandomFile.pdf或者SomeRandomFile.jpg我希望文件只是打开.但是我也希望将下载链接保留在一边,这样无论文件类型如何,我都可以强制下载提示.这有意义吗?

我已经尝试过FileStreamResult它适用于大多数文件,它的构造函数默认不接受文件名,因此根据url(根据内容类型不知道要提供的扩展名)为未知文件分配文件名.如果我通过指定强制文件名,我将失去浏览器直接打开文件的能力,我得到一个下载提示.有人遇到过这种情况么.

这些是我迄今为止尝试过的例子.

//Gives me a download prompt.
return File(document.Data, document.ContentType, document.Name);
Run Code Online (Sandbox Code Playgroud)

//Opens if it is a known extension type, downloads otherwise (download has bogus name and missing extension)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType);
Run Code Online (Sandbox Code Playgroud)

//Gives me a download prompt (lose the ability to open by default if known type)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType) {FileDownloadName = document.Name};
Run Code Online (Sandbox Code Playgroud)

有什么建议?

c# asp.net-mvc download http-headers asp.net-mvc-3

284
推荐指数
5
解决办法
33万
查看次数

ASP.NET MVC中的四个文件结果之间有什么区别

ASP.NET有四种不同类型的文件结果:

  • FileContentResult:将二进制文件的内容发送到响应.
  • FilePathResult:将文件的内容发送到响应
  • FileResult:返回二进制输出以写入响应
  • FileStreamResult:使用Stream实例将二进制内容发送到响应

这些描述来自MSDN,除FileStreamResult外,前三个声音相同.那么他们之间有什么区别?

asp.net-mvc file resulttype

135
推荐指数
2
解决办法
4万
查看次数

从服务器收到重复的标头

从服务器收到重复的标头

来自服务器的响应包含重复的标头.此问题通常是配置错误的网站或代理的结果.只有网站或代理管理员才能解决此问题.

错误349(net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):收到多个不同的Content-Disposition标头.不允许这样做以防止HTTP响应分裂攻击.

我在chrome中导出为pdf时发现了这个错误.

Response.Buffer = false;
Response.ClearHeaders();
string ext = objProp.PACKAGEFILENAME.Substring(objProp.PACKAGEFILENAME.LastIndexOf("."));
string ext1 = ext.Substring(1);
Response.ContentType = ext1;
Response.AddHeader("Content-Disposition", "target;_blank,attachment; filename=" + objProp.PACKAGEFILENAME);
const int ChunkSize = 1024;
byte[] binary = objProp.PACKAGEDOCUMENT;
System.IO.MemoryStream ms = new System.IO.MemoryStream(binary);
int SizeToWrite = ChunkSize;

for (int i = 0; i < binary.GetUpperBound(0) - 1; i = i + ChunkSize)
{
    if (!Response.IsClientConnected) return;
    if (i + ChunkSize >= binary.Length) SizeToWrite = binary.Length - i;
    byte[] chunk = new byte[SizeToWrite];
    ms.Read(chunk, …
Run Code Online (Sandbox Code Playgroud)

pdf google-chrome http-headers

113
推荐指数
4
解决办法
10万
查看次数

S3 下载文件名中带有逗号的图像会导致“net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION”

我存储了用户在 AWS S3 上上传的图像。当用户在浏览器中查看这些图像时,他们有指向我的应用程序的 url,我在那里使用 s3.getSignedUrl 重定向到一个临时签名的 url。99% 的情况下,一切都很好。

问题是,用户偶尔会上传文件名中包含逗号的图像。当他们然后尝试在 Chrome(并且只有 chrome)中查看该图像时,我收到此错误

net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
Run Code Online (Sandbox Code Playgroud)

我发现这是逗号,因为其他几个人也有类似的问题,他们通过设置 content-disposition 标头解决了这个问题。

使用 s3 和getSignedUrl,我认为这可以通过在 params 参数中设置 ReponseContentDisposition 属性来完成。具体的解决方法是在内容处置中正确引用文件名,或者只是将文件名设置为根本不包含逗号的其他内容。

然而,那个计划对我不起作用。有人对我可能出错的细节有任何想法吗?

我的服务器是 Node.js。这是执行重定向的 js(就像我说的通常效果很好)

function tempRedirect(req, res) {
    var filename = req.params[0];
    var params = {
        Bucket: S3_BUCKET,
        ResponseContentDisposition: 'inline; filename=' + filename.replace(/,/, '_'),
        Key: checkTrailingSlash(getFileKeyDir(req)) + filename
    };
    var s3 = new aws.S3(s3Options);
    s3.getSignedUrl('getObject', params, function(err, url) {
        res.redirect(url);
    });
};
Run Code Online (Sandbox Code Playgroud)

javascript amazon-s3 amazon-web-services node.js

5
推荐指数
1
解决办法
2042
查看次数