C# 使用Javascript/jQuery下载图像

C# 使用Javascript/jQuery下载图像,c#,asp.net,jquery,C#,Asp.net,Jquery,我们正在使用asp.net和c#3.5实现一个使用大量jQuery的网站。我们想从浏览器窗口下载一个img,但是(这里有一个窍门)只需单击按钮(除了右键单击另存为) 在我们开始之前,我应该说 我们知道这是一个img标签 从前端,我们可以轻松地 使用右键单击下载图像 另存为。我们希望这样做的唯一原因 从(比如)按钮下载图像 点击是因为我们在整个网站上 有可下载的下载按钮 内容(如datatable到excel文件 和PDF等),我们最好 我想在整个过程中保持标准 网站 我们正在生成图形,使用它可以

我们正在使用asp.net和c#3.5实现一个使用大量jQuery的网站。我们想从浏览器窗口下载一个img,但是(这里有一个窍门)只需单击按钮(除了右键单击另存为)

在我们开始之前,我应该说 我们知道这是一个img标签 从前端,我们可以轻松地 使用右键单击下载图像 另存为。我们希望这样做的唯一原因 从(比如)按钮下载图像 点击是因为我们在整个网站上 有可下载的下载按钮 内容(如datatable到excel文件 和PDF等),我们最好 我想在整个过程中保持标准 网站

我们正在生成图形,使用它可以很好地将图形渲染到屏幕上。这会将图像呈现到屏幕上,如下面的示例所示(使用Firebug)

有什么想法吗

请记住,我们正在尝试添加只需右键单击“另存为”的附加功能


编辑:这需要在Firefox和IE中工作。

试试这个,这将提示最终用户打开或保存文件

Response.ContentType=myDataReader.Item(1).ToString Response.AppendHeader(“内容处置:”,“附件;文件名=“+myDataReader.Item(2).ToString)
Response.WriteFile(Server.MapPath(“documents/”&myDataReader.Item(0.ToString))

您可以编写下载脚本,强制下载作为参数传递的文件(bz更改http头),然后执行类似(jQuery)的操作:

另外,也不要忘记(如果您这样做的话)清理/清理参数,否则人们将有办法下载您的脚本,如果他们现在选择了正确的目录/名称

然而,我认为你可以通过ASP做同样的事情,如果它不是某种CMS的话

编辑:或由AJAX完成…:]
编辑:阅读最新回复。。。如果您正在动态生成图形,那么必须能够再次生成相同的图形,如果数据相同,不是吗?如果是,则向上面提到的forcedownload传递数据(或指向数据的链接、处理程序、sql或其他内容),然后在该脚本中生成新图片,并直接使用forcedownload将其发送到客户端


编辑:新想法:]不要运行sql 2次-在父文档中,调用另一个脚本,该脚本运行sql,创建图像,将其保存到缓存中,然后使用图像http头输出到浏览器-这样,您就可以使用一个sql在磁盘(在某些tmp目录中)上创建图像,并可以链接到图像。希望有帮助

通过jquery ajax调用将图表呈现并作为标记返回,然后将返回值分配给div以便显示,img的src attrib来自axd处理程序(iCarthandler),我们无法访问axd处理程序两次(ASP的已知错误:图表控件),更改响应的ContentType不适用于这种情况,因此我们需要从浏览器缓存访问图像,或者以某种方式允许用户保存已显示的图像现在最好的解决方案看起来像是再次渲染图形(意味着重新执行sql!),除非有办法通过javascriptHi Adam从浏览器缓存下载内容,就像Neil说的,这是一个非常好的解决方案。但问题是,考虑到我们现在使用url几乎指向文件位置,是否存在任何安全问题?好吧,如果您在“图片提供”控制器中以某种方式对输入进行清理,以拒绝任何asp脚本、
。/
/
链接等,我看不出任何不安全的原因-如果,使用此脚本,用户可以只加载jpg,这样就不会造成任何伤害-您只能使用文件名链接,所以目录和扩展名都会随脚本一起添加。
<div align="center" style="margin-top: 30px; margin-bottom: 30px;" id="graph">
  <img style="border-width: 0px; height: 500px; width: 465px;" alt="Chart Loading" src="/Telma.UI/ChartImg.axd?i=chart_194e3c04c11240a7b7fba3e3e1d76d39_2.jpeg&amp;g=338b984aaab84b1da9a63db3150211e2" borderdashstyle="Solid" id="ctl00_Chart1">
</div>
<add key="ChartImageHandler" value="storage=session;privateImages=true;timeout=10;deleteAfterServicing=false;WebDevServerUseConfigSettings=true;" /> 
ImageStorageMode="UseImageLocation"
$("a#downloadButton").attr("href","link/to/forcedownload.asp?f="+$("#img").attr("src"));