动态生成图片 并下载 在线等

luluyy 2014-03-06 08:40:56
有一个方法create Picture_()返回一个bmp的图片,每次生成10个图片,最后将这10个文件打包后下载,这个怎么实现啊 asp.net的
生成单个的图片并下载是将这个图片流写入另一个页面,然后用<a herf 链接那个页面 实现的单个文件下载,批量下载 现在没有思路 请指点
...全文
224 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luluyy 2014-03-07
  • 打赏
  • 举报
回复
引用 12 楼 findcaiyzh 的回复:
dotnetzip使用起来很简单,下面是我的测试代码:

            using (ZipFile zip = new ZipFile())
            {
                zip.AddEntry("aaa - Copy.EMB", File.ReadAllBytes("c:\\temp\\aaa - Copy.EMB"));
                zip.AddEntry("GarbledCharacters.EMB", File.ReadAllBytes("c:\\temp\\GarbledCharacters.EMB"));
                
                using (MemoryStream stream = new MemoryStream())
                {
                    zip.Save(stream);

                    byte[] zipContent =  stream.GetBuffer();
                    File.WriteAllBytes("MyZipFile.zip", zipContent);
                }
            }
上面例子把byte[]的内容加入到zip包中,最后的zip文件也保存到byte[]中。都是在内存中,不需要临时文件。
我也下载了 看了一下,上面的方法中 zip.AddEntry("aaa - Copy.EMB", File.ReadAllBytes("c:\\temp\\aaa - Copy.EMB")); zip.AddEntry("GarbledCharacters.EMB", File.ReadAllBytes("c:\\temp\\GarbledCharacters.EMB")); 是读取的实际文件 现在我弄的程序要读取的文件(图片)是调用的某个接口返回的Image对像,试了一下效果是不错,目前还在优化,用了两种方法一种是把文件写入临时目录[写权限确实得手动设置] 最后打包后再请求某个页面完成下载,另一个方法就是您说的这个方法,但目前还没有玩转,你弄完了 不介意的话 给我发一份 我也参考一下
宝_爸 2014-03-07
  • 打赏
  • 举报
回复
image to byte[]:

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
luluyy 2014-03-06
  • 打赏
  • 举报
回复
引用 10 楼 findcaiyzh 的回复:
[quote=引用 9 楼 luluyy 的回复:] [quote=引用 8 楼 findcaiyzh 的回复:] 我准备用DotNetZipLib: http://dotnetzip.codeplex.com/ 看说明,支持从stream中压缩文件,这样就不用保存临时文件了。 Path.GetTempPath小心的,website可能没有权限读写它,最好在website下建立一个Temp目录,使用它保存临时文件。
哦 谢谢 我正在试 看用Path.GetTempPath方法是放到本机还是服务器 客户那个是域管理 确实会涉及到这个问题 谢谢 我去看看您发的那个链接[/quote] VS下调试应该没有问题,因为asp.net是运行在登录用户下的,部署到服务器上肯能会有问题,因为IIS下asp.net是默认运行在network service(IIS7下是指定account)的。[/quote] 部署了以后还没有尝试,目前是调试 http://dotnetzip.codeplex.com/ 这个不错 以前没有关注过 还是开源的 挺好 我下载了 好像打不开 再去研究一下 谢谢了 弄完了让得给我发一份啊
宝_爸 2014-03-06
  • 打赏
  • 举报
回复
引用 9 楼 luluyy 的回复:
[quote=引用 8 楼 findcaiyzh 的回复:] 我准备用DotNetZipLib: http://dotnetzip.codeplex.com/ 看说明,支持从stream中压缩文件,这样就不用保存临时文件了。 Path.GetTempPath小心的,website可能没有权限读写它,最好在website下建立一个Temp目录,使用它保存临时文件。
哦 谢谢 我正在试 看用Path.GetTempPath方法是放到本机还是服务器 客户那个是域管理 确实会涉及到这个问题 谢谢 我去看看您发的那个链接[/quote] VS下调试应该没有问题,因为asp.net是运行在登录用户下的,部署到服务器上肯能会有问题,因为IIS下asp.net是默认运行在network service(IIS7下是指定account)的。
luluyy 2014-03-06
  • 打赏
  • 举报
回复
引用 8 楼 findcaiyzh 的回复:
我准备用DotNetZipLib: http://dotnetzip.codeplex.com/ 看说明,支持从stream中压缩文件,这样就不用保存临时文件了。 Path.GetTempPath小心的,website可能没有权限读写它,最好在website下建立一个Temp目录,使用它保存临时文件。
哦 谢谢 我正在试 看用Path.GetTempPath方法是放到本机还是服务器 客户那个是域管理 确实会涉及到这个问题 谢谢 我去看看您发的那个链接
宝_爸 2014-03-06
  • 打赏
  • 举报
回复
我准备用DotNetZipLib: http://dotnetzip.codeplex.com/ 看说明,支持从stream中压缩文件,这样就不用保存临时文件了。 Path.GetTempPath小心的,website可能没有权限读写它,最好在website下建立一个Temp目录,使用它保存临时文件。
luluyy 2014-03-06
  • 打赏
  • 举报
回复
引用 6 楼 findcaiyzh 的回复:
存放在临时文件夹里就可以吧,打包完就删掉。 我也正在做类似的东西,做完发给你。
引用 6 楼 findcaiyzh 的回复:
存放在临时文件夹里就可以吧,打包完就删掉。 我也正在做类似的东西,做完发给你。
Path.GetTempPath 我试一下 开始想到了先放到Ftp服务器 后来考虑到使用完后删除文件 把问题复杂化了,就放弃了,临时文件也是一个办法,我想放到缓存里面 用完后清空缓存,但是放到缓存里面就不知道怎么实现压缩了 MLGBD 技术壁垒啊 我去试试
宝_爸 2014-03-06
  • 打赏
  • 举报
回复
存放在临时文件夹里就可以吧,打包完就删掉。 我也正在做类似的东西,做完发给你。
luluyy 2014-03-06
  • 打赏
  • 举报
回复
引用 3 楼 findcaiyzh 的回复:
假设: 生成单个的图片并下载是将这个图片流写入另一个页面 已经实现 需求是: 每次生成10个图片,最后将这10个文件打包后下载 那么很简单,生成10个图片,打包成zip,将zip文件流写入另一个页面。
生成10个图片并打包,打包的时候需指定文件的目录地址,即10个文件放到了哪里比如:C:\新建文件夹,这个点不会实现,在网上找了一些这样的方法 没有找到 请大师指点
宝_爸 2014-03-06
  • 打赏
  • 举报
回复
引用 3 楼 findcaiyzh 的回复:
假设: 生成单个的图片并下载是将这个图片流写入另一个页面 已经实现 需求是: 每次生成10个图片,最后将这10个文件打包后下载 那么很简单,生成10个图片,打包成zip,将zip文件流写入另一个页面。
注意ContentType 就可以了。
宝_爸 2014-03-06
  • 打赏
  • 举报
回复
假设: 生成单个的图片并下载是将这个图片流写入另一个页面 已经实现 需求是: 每次生成10个图片,最后将这10个文件打包后下载 那么很简单,生成10个图片,打包成zip,将zip文件流写入另一个页面。
by_封爱 2014-03-06
  • 打赏
  • 举报
回复
你可以使用rar在服务器先压一下 然后打包下载就好了吗... 在说了 你见过点一下下载出来很多东西的? 网盘那不都是打包么..
H_Gragon 2014-03-06
  • 打赏
  • 举报
回复
友情帮顶!
宝_爸 2014-03-06
  • 打赏
  • 举报
回复
dotnetzip使用起来很简单,下面是我的测试代码:

            using (ZipFile zip = new ZipFile())
            {
                zip.AddEntry("aaa - Copy.EMB", File.ReadAllBytes("c:\\temp\\aaa - Copy.EMB"));
                zip.AddEntry("GarbledCharacters.EMB", File.ReadAllBytes("c:\\temp\\GarbledCharacters.EMB"));
                
                using (MemoryStream stream = new MemoryStream())
                {
                    zip.Save(stream);

                    byte[] zipContent =  stream.GetBuffer();
                    File.WriteAllBytes("MyZipFile.zip", zipContent);
                }
            }
上面例子把byte[]的内容加入到zip包中,最后的zip文件也保存到byte[]中。都是在内存中,不需要临时文件。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧