Tag: 下载

从ASP.NET Web处理程序(.ashx)下载文件时的error handling

我有一个网页,用户可以通过ASP.NET Web处理程序( .ashx )下载PDF文件。 它的实现就像这个问题的答案一样。 我遇到的问题是当我做这个window.top.location.href = url; 在我的JavaScript中,如果处理程序中抛出exception,我无法真正控制会发生什么。 当一切正常时,用户体验是他们基本上停留在他们所在的页面上,浏览器告诉他们可以下载PDF文件。 但是,当处理程序中抛出exception时,它们会被重定向到处理程序的URL并显示一个空白页面。 以下是一些示例代码,使其更加清晰: JavaScript的: function openPDF() { var url = GeneratePDFUrl(); window.top.location.href = url; } 处理器: public override void Process(HttpContext context) { byte[] pdfdata = GetPDFData(); context.Response.ContentType = “application/pdf”; context.Response.AddHeader(“content-disposition”, “attachment; filename=\”” + GetPDFFileName() + “\””); context.Response.AddHeader(“content-length”, pdfdata.Length.ToString()); context.Response.BinaryWrite(pdfdata); } GetPDFData()抛出exception时会发生此问题。 我们正在尽我们所能阻止GetPDFData()抛出exception,但它是从用户输入生成的,所以我们也在这里处理它,以防有时我们不能/无法预测哪些会产生错误。 这是我提出的一个解决方案,但它显示用户错误文本(而不是空白页) public override void […]

Response.AddHeader(“Content-Disposition”)不在IE6中打开文件

我正在使用Response.AddHeader(“Content-Disposition”,“attachment; filename =”+ Server.HtmlEncode(FileName)); 为用户弹出“打开/保存文件”对话框,以便他们可以将文件下载到本地计算机上。 这通常在IE7中运行良好,但在IE6上,当用户单击“打开/保存文件”对话框中的打开按钮时,文件无法打开。 我通过网络发现了Response.AddHeader(“Content-Disposition”,“inline; filename =”+ Server.HtmlEncode(FileName)); 应该提供IE6中的工作,它的工作正常.. 但问题是大多数可以在浏览器中打开的文件在页面本身打开..即用户在邮件页面上点击下载它打开的图像文件,我需要它在IE7的情况下在另一个窗口打开我该怎么做…其他文件无法在系统中使用当前应用程序打开,即(word,excel等).. 请建议一种方法,坚持使用相同的代码为两个IE …我使用的代码在这里…. Response.AddHeader(“Content-Disposition”, “attachment; filename=” +FileName); Response.AddHeader(“Content-Length”, file.Length.ToString()); Response.ContentType = ReturnExtension(file.Extension.ToLower()); Response.TransmitFile(file.FullName); Response.End(); private string ReturnExtension(string fileExtension) { switch (fileExtension) { case “.txt”: return “text/plain”; case “.doc”: return “application/ms-word”; case “.xls”: return “application/vnd.ms-excel”; case “.gif”: return “image/gif”; case “.jpg”: case “jpeg”: return “image/jpeg”; […]

创建文件服务器上文件的下载链接

我正在寻找一种方法(轻松,优先;))创建一个单独的文件服务器上的文件的下载链接。 情况如下:我正在开发的应用程序(vb.net中的asp.net 2.0,但我在c#中有类似的问题,无论哪种解决方案适用于我)都将在公司内部运行。 按照良好做法,文件存储和Web应用程序位于两个单独的服务器上。 我基本上需要能够创建一个文件的下载链接,我必须访问该文件的唯一可用URL是\ servername \ folder1 \ folder2 \ folder3 \ file.txt (可以是任何类型的文件) Weblinks根本不起作用。 这是它目前的设置方式: tablerowfield.Text = String.Format( “Click me”, filename) 由于显而易见的原因,这不起作用。 它曾经被设置为将该文件写入应用程序路径本身并且完美地工作,但这不是好习惯,这就是我改变它(或尝试)的原因。 我阅读了有关创建下载页面的解决方案,然后在数据库中有一个表,其中包含链接并返回适当的Web URL以供下载,但不幸的是,我面临的时间限制不允许我开发它。 假设我可以像上面那样为文件提供一个包含完整文件路径的字符串,那么创建链接的最简单方法是什么?单击时,下载文档? 注意:我在此环境中拥有0个管理员权限。 那真的没有帮助我。 让我们假设我得到了如上所述的正确链接,并拥有相应的文件访问权限等。 更新: 上面的示例适用于IE,但不适用于Firefox和Chrome。 IE将其转换为文件:// servername / …链接,它可以实现预期,但FF和Chrome都主动决定这是不安全的,并已从浏览器中禁用它。

下载文件并自动将其保存到文件夹

我正在尝试创建一个用于从我的网站下载文件的UI。 该站点具有zip文件,需要将这些文件下载到用户输入的目录中。 但是,我无法成功下载该文件,它只是从一个临时文件夹打开。 码: private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { e.Cancel = true; string filepath = null; filepath = textBox1.Text; WebClient client = new WebClient(); client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); client.DownloadFileAsync(e.Url, filepath); } 完整源代码: http : //en.paidpaste.com/LqEmiQ

如何检查System.Net.WebClient.DownloadData是否正在下载二进制文件?

我正在尝试使用WebClient使用WinForms应用程序从Web下载文件。 但是,我真的只想下载HTML文件。 我想要忽略的任何其他类型。 我检查了WebResponse.ContentType ,但它的值始终为null 。 任何人都知道原因是什么?

下载多个文件异步并等待所有文件完成后再执行其余代码

我试图从互联网上下载多个文件,等待所有这些文件完成。 这是我正在运行的C#控制台应用程序,因此不需要进度条事件处理程序。 但是,即使尚未下载所有文件,它目前仍继续执行代码。 1.下载所有文件! 2.完成下载文件A. 3.Finished下载所有文件! 4.Finished下载文件B. 5.Finished下载文件C. 您将如何等待所有异步下载文件完成。 private void DownloadMultipleFiles(List doclist) { foreach(var value in doclist){ try { using (WebClient webClient = new WebClient()) { string downloadToDirectory = @Resources.defaultDirectory + value.docName; webClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; webClient.DownloadFileCompleted += client_DownloadFileCompleted; webClient.DownloadFileAsync(new Uri(value.docUrl), @downloadToDirectory); //Add them to the local Context.listOfLocalDirectories.Add(downloadToDirectory); } } catch (Exception) { Errors.printError(“Failed to […]

ASP.NET如何将文件流式传输给用户

最初我试图找出Response.Close和Response.End之间的区别,但是在进行了更多的谷歌搜索和研究之后,很明显我没有看到Byte []被发送回客户端的常见方式。 我将在下面留下代码示例,但我想知道行业标准是做什么的。 Byte[] myBytes = GetReportBytes(); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.AppendHeader(“content-length”, myBytes.Length.ToString()); HttpContext.Current.Response.AppendHeader(“content-Disposition”, “attachment;filename=” + this.ReportFileName + GetReportExtension()); HttpContext.Current.Response.ContentType = GetApplicationContentType(); HttpContext.Current.Response.BinaryWrite(myBytes); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.Close(); //CERT FIX //HttpContext.Current.Response.End();