首页 新闻 搜索 专区 学院

ashx产生的二维码图片, 很多手机用户保存图片失败怎么办?

0
悬赏园豆:50 [已解决问题] 解决于 2015-06-25 11:40
                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是正常的。 

奋奋奋的主页 奋奋奋 | 初学一级 | 园豆:32
提问于:2015-06-09 16:30
< >
分享
最佳答案
0

加这个代码就可以将下载的文件名修改

context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName)

收获园豆:30
$克 | 菜鸟二级 |园豆:217 | 2015-06-10 09:41
 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的。。。。。 

奋奋奋 | 园豆:32 (初学一级) | 2015-06-10 11:35

@奋奋奋: 

context.Response.AddHeader("title", fileName);
context.Response.AddHeader("Content-Transfer-Encoding", "binary");

 

加到 context.Response.OutputStream.Write之前

另外最好用 context.Response.BinaryWrite方法来输出流

$克 | 园豆:217 (菜鸟二级) | 2015-06-10 11:39

@$克: 更加不行了, 连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);
奋奋奋 | 园豆:32 (初学一级) | 2015-06-10 15:07
其他回答(1)
0

估计是图片的文件后缀问题吧。

尝试把你的图片URL包装成

http://xxxxx/xxxxx/QR/xxxxxx.jpg

这样的格式。

收获园豆:20
我只是来看戏的 | 园豆:367 (菜鸟二级) | 2015-06-10 09:34

嗯, 下载下来, 文件名变成了***.ashx了,  如何包装成.jpg这种? 

 

支持(0) 反对(0) 奋奋奋 | 园豆:32 (初学一级) | 2015-06-10 09:35

@奋奋奋: 

如果是我做的话,我不会用ashx ,会更直接的使用httphandler

https://msdn.microsoft.com/ja-jp/library/ms227439(v=vs.100).aspx

支持(0) 反对(0) 我只是来看戏的 | 园豆:367 (菜鸟二级) | 2015-06-10 09:53

@Jerry Yang: 

context.Response.ContentType = "image/png"; context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.jpg", DateTime.Now.ToString("yyMMddHHmmss"))); context.Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);

为什么加了还是保存文件名是***.ashx的。。。。。 

支持(0) 反对(0) 奋奋奋 | 园豆:32 (初学一级) | 2015-06-10 11:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册