将多个图像从asp.net中的文件夹保存到本地
Posted
技术标签:
【中文标题】将多个图像从asp.net中的文件夹保存到本地【英文标题】:save multiple image to local from folder in asp.net 【发布时间】:2011-08-14 14:59:48 【问题描述】:我遇到了文件下载问题,您能帮我解决一下吗...
代码如下:
DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/Bailiffs/BailiffFiles/"));
string cukurNumber = string.Empty;
if (txtCukurNumber.Text != string.Empty)
cukurNumber = txtCukurNumber.Text;
FileInfo[] fileInfoEnum = directoryInfo.GetFiles(cukurNumber + "*");
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + txtCukurNumber.Text + ".zip");
Response.ContentType = "application/zip";
using (ZipOutputStream zipStream = new ZipOutputStream(Response.OutputStream))
zipStream.SetLevel(9);
byte[] zipBuffer = new byte[4096];
foreach (FileInfo fileInfo in fileInfoEnum)
string fileFullName = fileInfo.FullName;
ZipEntry zipEntry = new ZipEntry(Path.GetFileName(fileFullName));
zipEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(zipEntry);
using (FileStream fileStream = File.OpenRead(fileFullName))
int sourceBytes = 0;
do
sourceBytes = fileStream.Read(zipBuffer, 0, zipBuffer.Length);
zipStream.Write(zipBuffer, 0, sourceBytes);
while (sourceBytes > 0);
zipStream.Finish();
zipStream.Close();
Response.Flush();
Response.End();
此代码必须通过过滤器获取所有图像文件并保存到磁盘,但浏览器的保存文件对话框仅打开一次,并且正在保存一个奇怪的文件...我在哪里做错了...
谢谢..
编辑:现在解决了奇怪的文件问题,主要问题是保存单个文件而不是多个.. 再次感谢...
【问题讨论】:
您能否澄清一下:您是否要将图像作为单个图像保存到本地客户端?还是您希望它为下载的每张图片多次提示用户? 【参考方案1】:虽然您正在遍历目录中的每个文件,但一旦您在循环的第一次迭代中执行了 Response.End(),对用户的响应就完成了。他们只会得到枚举器找到的第一个文件。
浏览器没有以您尝试的方式接收多个文件的概念。
您可以考虑收集各种图像文件并将它们放在一个 ZIP 文件中,然后将一个 ZIP 返回给用户。
以下示例代码将构建图像的 ZIP(使用 SharZipLib)并使用名为“images.zip”的单个文件进行回复
为 SharpZipLib 包括这些 using 语句:
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
然后在您要流回 ZIP 文件的方法中:
DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/Bailiffs/BailiffFiles/"));
string cukurNumber = string.Empty;
if (txtCukurNumber.Text != string.Empty)
cukurNumber = txtCukurNumber.Text;
IEnumerable<FileInfo> fileInfoEnum = directoryInfo.EnumerateFiles( cukurNumber + "*" );
Response.Clear();
Response.AddHeader( "Content-Disposition", "attachment;filename=images.zip" );
Response.ContentType = "application/zip";
using( ZipOutputStream zipstream = new ZipOutputStream( Response.OutputStream ) )
zipstream.SetLevel( 9 ); // 0-9, 9 being the highest compression
byte[] buffer = new byte[4096];
foreach( FileInfo fileInfo in fileInfoEnum )
string file = fileInfo.FullName;
ZipEntry entry = new
ZipEntry( Path.GetFileName( file ) );
entry.DateTime = DateTime.Now;
zipstream.PutNextEntry( entry );
using( FileStream fs = File.OpenRead( file ) )
int sourceBytes;
do
sourceBytes = fs.Read( buffer, 0, buffer.Length );
zipstream.Write( buffer, 0, sourceBytes );
while( sourceBytes > 0 );
zipstream.Finish();
zipstream.Close();
Response.Flush();
Response.End();
【讨论】:
感谢@aaron,压缩文件可能很有用,但这不是问题......我的问题是单个文件保存到本地而不是多个文件,顺便说一下我解决了奇怪的文件问题......再次感谢... 如果您想将所有图像作为单个文件保存到本地客户端,您需要构建一个图像(将所有文件合并在一起),或者按照我的建议将它们压缩。 不是一个文件,而是一次下载单独的文件,而是因为浏览器的 savefiledialog 代码无法访问其余文件... 但你提出了一个想法,我会在下载时尝试将文件压缩为一个文件以上是关于将多个图像从asp.net中的文件夹保存到本地的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 将图像保存在文件夹中? ASP.NET
ASP.NET - 如何在浏览器中显示图像而不将图像保存在临时文件中?
将生成的 html 文档保存到 ASP.NET 中的特定文件夹