当我点击一个链接到一个图像时,我如何向用户展示一个保存文件对话框?
本文关键字:一个 用户 保存文件 对话框 图像 链接 | 更新日期: 2023-09-27 18:13:27
我已经做了一些环顾四周,似乎解决问题的方法似乎是改变文件的内容头,因此它不被视为常规图像。
这一切都很好,我已经尝试写一个图像处理程序来做到这一点。问题是我使用的图像有多种格式。我将使用jpg/png/tiff/eps。
我的计划是使用Bitmap类打开文件,然后使用
保存到输出流Bitmap bmap = new Bitmap(context.Server.MapPath(imagePath));
bmap.Save(context.Response.OutputStream, ImageFormat.<Format goes here>);
问题是。net似乎不支持eps扩展,所以我该如何处理这些文件?我的方法正确吗?
感谢编辑:我实际上结合了你的两个建议,想出了:
// determine what type of file to send back
switch (Path.GetExtension(imagePath))
{
case ".png":
context.Response.ContentType = "image/png";
context.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".png");
break;
case ".jpg":
context.Response.ContentType = "image/jpeg";
context.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".jpg");
break;
case ".tiff":
context.Response.ContentType = "image/tiff";
context.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".tif");
break;
case ".eps":
context.Response.ContentType = "image/postscript";
context.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".eps");
break;
}
context.Response.WriteFile(context.Server.MapPath(imagePath));
context.Response.Flush();
似乎已经成功了-谢谢你们的帮助!
您听说过content-disposition header吗?它允许您告诉浏览器询问用户如何处理该文件,而不是尝试自己处理它。我不认为它是HTTP规范的一部分,但它是由IETF在RFC 2183下记录的。
MSDN上有一些文档显示如何添加所需的响应头。
我建议使用上下文可用的WriteFile方法。响应,然后调用Flush,例如:
Response.WriteFile(context.Server.MapPath(imagePath));
Response.Flush();