当我点击一个链接到一个图像时,我如何向用户展示一个保存文件对话框?

本文关键字:一个 用户 保存文件 对话框 图像 链接 | 更新日期: 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();