将多个图像从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中的文件夹保存到本地的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 url 下载到 .Net Core 中的本地设备

如何使用 javascript 将图像保存在文件夹中? ASP.NET

ASP.NET - 如何在浏览器中显示图像而不将图像保存在临时文件中?

将生成的 html 文档保存到 ASP.NET 中的特定文件夹

从 Div 创建图像并使用 Javascript 和 ASP.net 将其保存到服务器

保存对话框以下载文件,将文件从 ASP.NET 服务器保存到客户端