为什么此代码将0kb文件发送到浏览器?

时间:2010-09-13 18:20:48

标签: c# asp.net-mvc http attachment actionresult

这是电话......

return new FileUriResult("application/octet-stream", a.AssetPath, null);

[请注意,我将内容长度设置为null,因为我不知道它(文件在另一台服务器上)]

a.AssetPath是:“http://http.cdnlayer.com/account name / folder / folder / folder / asset.mp3”

(此示例的假URL但在我的实现中我可以直接浏览文件,但此附件方法不起作用)

这是实施......

public class FileUriResult : ActionResult
    {
        private string _contentType;
        private string _fileUri;
        private long? _fileLength;

        public FileUriResult(string contentType, string fileUri, long? fileLength)
        {
            _contentType = contentType;
            _fileUri = fileUri;
            _fileLength = fileLength;
        }

        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            HttpResponseBase response = context.HttpContext.Response;

            response.ContentType = _contentType;
            response.AddHeader("Content-Disposition", "attachment; filename=" + _fileUri);
            if(_fileLength != null)
                response.AddHeader("Content-Length", _fileLength.ToString());
        }
    }

文件正在直接下载,就像我想要的那样(不是由浏览器打开)但是它不是文件,它只是一个同名的0kb文件。

1 个答案:

答案 0 :(得分:1)

您只能通过使用FileResult发送二进制数据来强制下载为附件。您不能以这种方式强制从URL下载文件作为附件。你告诉浏览器的所有内容都是附件,你给它的URL作为保存它的名称。

您需要自己读取文件,并将其作为一系列字节写入响应。