string qrurl = CreateQRCodeUrl(context.Request["oid"], context.Request["tp"]); QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); Gma.QrCodeNet.Encoding.QrCode qrCode = new Gma.QrCodeNet.Encoding.QrCode(); qrEncoder.TryEncode(qrurl, out qrCode); using (MemoryStream ms = new MemoryStream()) { var renderer = new GraphicsRenderer(new FixedModuleSize(4, QuietZoneModules.Two)); renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms); context.Response.ContentType = "image/png"; context.Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length); }
有很多手机, 如安卓自带浏览器, 长按QR图片弹出菜单, “储存图片到本地”, 会提示保存失败。。。 这个问题谁遇到过, 怎么样写才能解决这个问题呢? IOS下的sf是正常的。
加这个代码就可以将下载的文件名修改
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName)
context.Response.ContentType = "image/png"; context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=crd{0}.jpg", DateTime.Now.ToString("yyMMddHHmmss"))); context.Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
为什么加了还是保存文件名是***.ashx的。。。。。
@奋奋奋:
context.Response.AddHeader("title", fileName);
context.Response.AddHeader("Content-Transfer-Encoding", "binary");
加到 context.Response.OutputStream.Write之前
另外最好用 context.Response.BinaryWrite方法来输出流
@$克: 更加不行了, 连iphone都不能下载了。
context.Response.ContentType = "image/png"; context.Response.AddHeader("title", DateTime.Now.ToString("yyMMddHHmmss") + ".jpg"); context.Response.AddHeader("Content-Transfer-Encoding", "binary"); context.Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
估计是图片的文件后缀问题吧。
尝试把你的图片URL包装成
http://xxxxx/xxxxx/QR/xxxxxx.jpg
这样的格式。
嗯, 下载下来, 文件名变成了***.ashx了, 如何包装成.jpg这种?
@奋奋奋:
如果是我做的话,我不会用ashx ,会更直接的使用httphandler
https://msdn.microsoft.com/ja-jp/library/ms227439(v=vs.100).aspx
@Jerry Yang:
为什么加了还是保存文件名是***.ashx的。。。。。