我有在asp.net下载文件的功能。我有字节,文件名和大小。我尝试过以下方式,但每当我打开文件时,它都没有正确打开。如果是jpg或png文件,它就不会显示图片。
这是关于按钮点击的代码:
byte[] bytes = Encoding.ASCII.GetBytes(getStringFromServer());
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
我已经阅读过某些需要指定ContentType的地方。但就我而言,文件可以是任何类型。
有人可以指导我吗?
答案 0 :(得分:0)
我有同样的问题,用非常简单的方法解决它 通常你的文件名有文件类型所以我使用这个代码:
foreach ($this->pool as $w) {
$w->start(PTHREADS_INHERIT_ALL ^ PTHREADS_INHERIT_CLASSES);
}
这是我的FileFetchManager类:
string fileType = fileName.Substring(fileName.LastIndexOf(".") + 1);
if (FileFetchManager.IMAGE_TYPES.Contains(fileType, StringComparison.OrdinalIgnoreCase, true))
HttpContext.Current.Response.ContentType = "image/" + FileFetchManager.ConvertFileExtensionToImageFormat(fileType).ToString();
else
HttpContext.Current.Response.ContentType = "application/" + fileType;
我希望它对你有用
答案 1 :(得分:0)
内容类型的目的是允许用户代理(UA)确定下载资源的类型。没有内容类型,下载的内容只是裸数据,可以是任何内容。
在某些情况下,可能会推断出内容类型,但这在很大程度上取决于上下文。如果内容是图像,UA可以推断图像类型,如果内容是文本,它可以检查字节顺序标记等。但由于数据几乎可以是任何东西,因此UA不可能这样做一种推论。
您已指定内容类型application/octet-stream
。这意味着你告诉UA内容是二进制数据。这就是UA如何对待它。如果要将数据识别为图像,则需要指定正确的内容类型; application/octet-stream
还不够。
存储可以是任何类型的数据时,绝对有必要将MIME类型与数据一起存储。如果您从光盘中读取数据,则可以从文件扩展名中输入内容类型,但您的服务器需要这样做,因为UA无法实现。