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

Posted

技术标签:

【中文标题】保存对话框以下载文件,将文件从 ASP.NET 服务器保存到客户端【英文标题】:Save dialog box to download file, Saving file from ASP.NET server to the client 【发布时间】:2012-10-11 06:29:52 【问题描述】:

我一直在互联网上搜索,但找不到任何有用的答案。

我有一个 ASP.NET 网站,它部署在服务器上。 服务器上的 ASP.NET 网站可以访问名为 W:/ 的目录。 公司的客户可以访问该网站。该网站在 ListBox 中列出了 W:/ 目录中的所有 PDF 文件。客户端应该能够从列表框中选择 PDF 文件,并通过为其选择位置将它们保存到本地 PC。

类似于在网页上另存为文件。

您能否提供一些解决方案或解决方法?

【问题讨论】:

【参考方案1】:

终于找到一篇文章,提示保存对话框从 ASP.NET 下载文件

我把它贴在这里,也可以帮助其他人并节省一些时间。

 String FileName = "FileName.txt";
 String FilePath = "C:/...."; //Replace this
 System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
 response.ClearContent();
 response.Clear();
 response.ContentType = "text/plain";
 response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
 response.TransmitFile(FilePath);
 response.Flush();
 response.End();

【讨论】:

感谢 Cory Mathews 的文章。 它可以用于下载 .zip 文件吗?应该使用什么 ContentType?【参考方案2】:

这是 user1734609 的解决方案的扩展,可以在本地获取文件。

从服务器下载文件到客户端:

public void DownloadFile()
        
            String FileName = "201604112318571964-sample2.txt";
            String FilePath = AppDomain.CurrentDomain.BaseDirectory + "/App_Data/Uploads/" + FileName;
            System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
            response.ClearContent();
            response.Clear();
            response.ContentType = "text/plain";
            response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
            response.TransmitFile(FilePath);
            response.Flush();
            response.End();


        

【讨论】:

【参考方案3】:

正确的关键字是“文件浏览器asp.net”找到很多带有源代码的示例。

这是来自codeproject的一个:

http://www.codeproject.com/Articles/301328/ASP-NETUser-Control-File-Browser

【讨论】:

@user1734609 这是你要找的吗? :) 我已经通读了这篇文章,但不完全是:) 我在 ListBox 中有 PDF 文件名。 W:/ 目录中的文件位于不同的服务器上,但在域内。列表框列出了该目录的所有文件名。公司内部的客户端在打开网站时可以从目录中获取PDF文件列表。然后选择一个或多个并单击另存为。并且应该可以保存在自己的PC上:) 你明白重点吗? :) @user1734609 是的,我明白了。您从该代码开始,然后在选择文件以将其显示给浏览器时,从包含所有域的表中进行选择。我不知道你如何设置它,也许是共享目录,也许是 ftp 读取,也许是克隆......【参考方案4】:

从W盘获取byte[]中的文件内容并写入本地文件。

byte[] data = File.ReadAllBytes(WDriveFilePath)

FileStream file = File.Create(HttpContext.Current.Server.MapPath(MyLocalFile)); 

file.Write(data, 0, data.Length); 
 file.Close(); 

【讨论】:

这不提供保存对话框。【参考方案5】:

我做了类似的事情来获取文件。

protected void btnExportFile_Click(object sender, EventArgs e)
        
            try
            
                Thread newThread = new Thread(new ThreadStart(ThreadMethod));
                newThread.SetApartmentState(ApartmentState.STA);
                newThread.Start();     

               // try using threads as you will get a Current thread must be set to single thread apartment (STA) mode before OLE Exception .


            
            catch (Exception ex)
            

            

        

        static void ThreadMethod()
        
            Stream myStream;
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.FilterIndex = 2;
            saveFileDialog1.RestoreDirectory = true;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            
                if ((myStream = saveFileDialog1.OpenFile()) != null)
                
                    // Code to write the stream goes here.
                    myStream.Close();
                
            
        

【讨论】:

以上是关于保存对话框以下载文件,将文件从 ASP.NET 服务器保存到客户端的主要内容,如果未能解决你的问题,请参考以下文章

在 Asp.net 网页中显示保存文件对话框

在asp.net中如何选择本地文件夹保存

在 ASP.Net Core 中下载文件时,我的文件从服务器正确返回,但没有从 UI [重复]

通过 ASP.NET 向用户发送 Excel

将多个图像从asp.net中的文件夹保存到本地

课时29:文件:一个任务