如果文件中,需要下载一个文件,一般用超级链接的方式即可。
但是如果是图片,浏览器会默认打开图片浏览,不是实现下载。
考虑可以使用jquery ajax提交form请求的方式。
jquery download函数:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// Ajax 文件下载
jQuery.download = function (url, data, method) {
// 获取url和data
if (url && data) {
// data 是 string 或者 array/object
data = typeof data == 'string' ? data : jQuery.param(data);
// 把参数组装成 form的 input
var inputs = '';
jQuery.each(data.split('&'), function () {
var pair = this.split('=');
inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
});
// request发送请求
jQuery('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>')
.appendTo('body').submit().remove();
};
};
|
用jquery的方式组织一个字符串,模拟提交一个form请求。
也就是动态渲染表单,提交表单后再删除。
html的图片代码:
|
1
|
<img onclick=\"GetSrcFromSvc('" + name + "')\" src=\"" + imgurl + "\" //>
|
GetSrcFromSvc函数实现调用:
|
1
|
$.download("http://localhost:2204/wx/Default.aspx", "img=" + url, 'post');
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite下载超过
400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 ///指定被输出图像的地址
string imgurl = Request.Form["img"];
string FileName = Server.MapPath(imgurl);
// System.Drawing.Image img = System.Drawing.Image.FromFile(imgurl);
// MemoryStream ms = new System.IO.MemoryStream();
// img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
// img.Dispose();
// context.Response.ClearContent();
// context.Response.ContentType = "image/jpg";
// context.Response.BinaryWrite(ms.ToArray());
// //context.htm = htm&File(FileName);
// ////將buffer 中的stream全部送出
// context.Response.Flush();
//// context.Response.End();
string filePath = Server.MapPath(imgurl);//路径
if (File.Exists(filePath))
{
FileInfo fileinfoo = new FileInfo(filePath);
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileinfoo.Name + "");
Response.TransmitFile(filePath);
}
else
{
htm = htm&("未找到文件。");
}
|
asp.net 流方式下载:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
string imgurl = Request.Form["img"];
string FileName = Server.MapPath(imgurl);
if (File.Exists(FileName))
{
FileInfo fileinfoo = new FileInfo(FileName);
//以字符流的形式下载文件
FileStream fs = new FileStream(FileName, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileinfoo.Name, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
|
测试环境:
win7+IE9 IE10 。手机端:uc。
其他浏览器无法预计效果。