.NET 图像处理程序在下载时剥离文件类型

Posted

技术标签:

【中文标题】.NET 图像处理程序在下载时剥离文件类型【英文标题】:.NET image handler stripping filetype on download 【发布时间】:2011-04-19 11:03:14 【问题描述】:

我创建了一个 ashx 处理程序来从 mysql 数据库中的图像呈现图像缩略图。如果通过查询字符串传递文件名,则设置内容处置文件名(当用户单击“另存为...”时,将显示文件名)。当用户选择“另存为...”时,图像正确显示,文件名出现,但文件类型列为未知,下载的文件没有类型。

我已经尝试在内容配置文件名的末尾添加“.jpg”,因为没有任何其他尝试,但这使得每个图像下载为 untitled.bmp。

 byte[] imageData = null;
 Image outputImage = null;

 if (!String.IsNullOrEmpty(HttpContext.Current.Request.QueryString["pictureid"]))
        pictureId = SafeConvert.ToInt(HttpContext.Current.Request.QueryString["pictureid"].Trim());
        if (pictureId > -1)
        
            if (!String.IsNullOrEmpty(fileName))
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "filename=" + fileName + ";");

            imageData = new OHTManager().GetOrnamentImage(pictureId);

            context.Response.ContentType = "text/jpeg";
            context.Response.BinaryWrite(imageData);
        
        else
        
            throw new Exception("No image could be produced;");
        

【问题讨论】:

【参考方案1】:

我认为您希望 context.Response.ContentType 标头使用 image/jpeg 而不是 text/jpeg。您还需要设置一个有效的content disposition;你可能想要附件。目前您只有文件名参数,并且在不指定内容处置类型的情况下,标头无效。您的标题最终应如下所示:

Content-Disposition: attachment;filename=the_filename_here.ext

【讨论】:

内容类型是问题,非常感谢!我也按照您的建议更新了我的内容处置标题。

以上是关于.NET 图像处理程序在下载时剥离文件类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 FileResult 在 Asp.Net MVC 中下载任何类型的文件?

如何从Javascript中任何图像类型的base64字符串中剥离数据:图像部分

Asp.net http 处理程序文本文件下载问题。适用于代码隐藏

处理 .NET 应用程序中的泄漏(事件类型)

如何从 asp.net 处理程序返回 404 错误?

ASP.NET/IIS:所有文件类型为 404