下载.xls文件与Response.WriteFile下载与网页内容文件 [英] Downloading .xls file with Response.WriteFile downloads file with webpage content

查看:251
本文介绍了下载.xls文件与Response.WriteFile下载与网页内容文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用VB与文件上传控件一个简单的ASP.NET网页。用户将上传.xls和一个新的.xls文件在项目目录用新的格式和一些计算产生。这个文件保存,打开,并显示没有问题。

I have a simple ASP.NET webpage using VB with a file upload control. The user will upload a .xls and a new .xls file is created in the project directory with a new format and some calculations. This file saves, opens, and displays without an issue.

在这个按钮点击事件,我想新创建的文件下载到用户的浏览器/下载文件夹中。当使用Response.WriteFile有到Response.End,.xls文件下载正确...但有一个线程中止被捕获并没有任何的Response.WriteFile行后,即使我把它放在catch语句处理异常(即我有我想要告诉用户,然后显示该文件已被成功下载)的标签。

Within this button click event, I want the newly-created file to download to the user's browser/Downloads folder. When using Response.WriteFile with a Response.End, the .xls file downloads properly...BUT there's a thread abort exception that is caught and nothing after the Response.WriteFile line is processed even if I put it in the catch statement (i.e. I have a label that I want to tell the user to then display that the file has been successfully downloaded).

下面是初始code,它主要作品:

Here's the initial code that mostly works:

Protected Sub btnUpload_Click(sender As Object, e As EventArgs) Handles btnUpload.Click
        If fuReport.HasFile Then

'All report processing occurs & report is created without issue

    Try
        Response.Clear()
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", strReportName))
        Response.ContentType = "application/vnd.ms-excel"
        'Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        Response.WriteFile(strReportName)
        Response.End()
        lblResult.Text = "Report was successfully downloaded."
     Catch
        lblResult.Text = "Testing1."
     Finally
        lblResult.Text = "Testing2."
        fuReport = New FileUpload()
     End Try
    End If
    End Sub

我见过的.xls文件将contentType一些不同的建议。无论是内容类型上面会下载该文件,但没有在catch或finally语句处理。 lblResult还写着:请稍等,您的报告正在处理......

I've seen some different recommendations for the ContentType of .xls files. Both of the content types above will download the file but nothing in the Catch or Finally statement is processed. lblResult still reads, "Please wait while your report is processing..."

我在网上找到的问题在于到Response.End()。每 https://support.microsoft.com/en-us/kb/ 312629 / EN-US 的,我换成这与

I found online that the issue lies with Response.End(). Per https://support.microsoft.com/en-us/kb/312629/en-us, I replaced this with

HttpContext.Current.ApplicationInstance.CompleteRequest()

这造成了新的问题。我的.xls文件会下载,但它似乎显示乱码,其次是一些aspx页面内容。这里,标签被正确列出即使它并没有在网页上的变化。我没有足够的声誉,包括截图,但是这是一些Excel文件显示什么:

This caused a new issue. My .xls file would download, but it seemed to display gibberish, followed by some of the aspx page content. Here, the label is correctly listed even though it has not changed on the webpage. I don't have enough reputation to include a screenshot, but this is some of what the Excel file displays:

ˆdQ_9€`Èb/ecÈ¢l†=gÊC\Œ¬ÀxbY"Â…‘#ˆ,ör6ˆ,Ê…8ëY8ÖæBô?³2º‹CÓž€|^î¯{{<xJñ¯ªç2,FÑ+sbŸ£å›q³žcm"9ŸÛÆ…îâpoŸûñä_õ¥1­K×Ê1Ü–‘äŒä‚$‹’,ÊÞÿ?ëY9ÖÎɺa 9†7(Æ‘E‰c<µŠ$wïå¼Q9çƒìù93vì£Þ¾ŠõXè.î·ÛúÏöX;`>¸w!‚™•ó‘#Ž,8²(ãÞqÖ3q¬M¥dÝ ‚Â7VE¾‰`|mä^@Y"°çÞÌØZXß²‹O•½në›×å­=än½‘°i"EàqÅ^Ê6‹²(×›õìks   žú¦¸Ð½µW§îo[‚‡ÚGÈýz3·!dÑ„@ dq€E9õ×3lfl%Ø™^Vv
@ÈB{)[²èïmÖ³l¬…8óI–½-?o{ÖΤ,÷IJhC ²ØKÙ²hmïÕΞâ}û‡.vÝÌznµ³ð±Lâc¹7†E  ÜOpÁÅ^ÎÆEyüæ=£ÆÚÄÏnïýúº·7åå‡v³Í[;οŠþ•PˆÃp%*0B!ö
ÑÓè¼gÓX›8N—ï\èõXèÞÞ4·íTÏöõeùí$ñõ­~À"Böº/kûϵýõ\Þ8½>SF+/åê1³{þÌœý†éêÔߊ*t-Áwí>ÕnW¿¯ö΀žE" 9åÕÈFY"ùöâ¼gÏX›*Ñ^¸ñÓ*‘uo›ËK;"Áð/. 
½g/D‰ ?KQFþÝF3©ö|š9›1JÖi"¬÷m6‘lB/oD‘s0²èŒ=·fÎvBŒ‘u#ëŒ,JãK#YPdÑ1{ŽÍœ{+<˜WY÷v_ï®Úǽªêë{ñæѽЖ9ÅëÚ–9,À’–,X²(×z›÷ÌkÓÒö;+»>²ì6£®ËÛwÁýë½á0‚,JaRå!‹½œm¥Ê¢×vôúÁìÉï¼éŸ÷<kÁé*øLƒÐýËNÖ|SloŸmë¿ìÍ©ƒ·ú·Å*÷ï½Ðl(Y"PÆ+$YdQv1öü›9‹qT¬kQþk[W‡;+õ…›âš"z÷FÅ@r×   ¤X³rA"Å^ÞV—,:â2¹è:Ö¦Úœ-fþô*t"×Õ·í»©ÁÛþ"„¢D3,K€A
±RˆòMYôÌkç1dÝ †"`È¢Ä0¾JŠ_, r÷DeBìù9vìÌTS±ÐýQnm‹x;©îªƒ³P:‹^ùJ"ÆeÈ?Wdq@EÙïN-zfŽµ±Cˆ¬‘xV AdQ‚uÈEY"O±çã,Øf°ÃyE±ÝU}gÞøÛò]mŸ;ök‘{öWª¢Û„1®EÑë"Éé"ñ©ûRÃsõ£ŠÜcælÚópì1ÄY7!Gð}U‘nB•ÈÝŠJdqÀE™{΂½…˜!ë†0äC%†|Ÿ!~´àÈ)Y"ɱgà,Ø`˜¬‚… 
Ëþ¨¶—;oì‰q°óFtì    
‡]¹Û„1žM9€ Èb/åJ9cóÔ¢çÞX×4‹¹wY²«!ëþ¨+û4Š8¿z*"xƒaü¸ÛĦRŽ ²ØËÙ²({ø¢çÜX›0Ž‚³n…ì;V£.oǧkŠ Þ HN8Œ‘Ž,öR6Ž,Ê›J—=·ÆÚqí$:£xÛÞ$Ú‹R‡ÏîÂTðŸM    Q"ÈWD…1
±Qˆr?8µìY6ÖÎɺ 9€7 ÅXd›@Æsªˆ  ~Εs6Äže³dG!®FÖ  
€Èˆ,JÃùTü\Á{÷R6†,ÊfØsl–ì'Ì#Ï;Y…ÎÚ5ñäo'›}]í.Gßú"+çà›¨"8¹W"ÅNñDcÙso¬ÍSkD"ußG"cyÃc³,‹Q˜e9‚@Êb/g«Pƒ´çæ,Ùj°"õß¾º?ê݇v+ÇoÍv,{¸coLŒ#‹†pä‚#‹½œ#‹ŽáØst–l5Ìã`²eÝÍÎοY—ûwöBŽ?ÃrßÐÙ&ŽbùÊ]–,X²(oëñ²gèX›gØàb¡û£i®Ì/ªw;ôwrˆGN7q„y•#†,²(w+DzçëX›).¼…‡­|X÷ÇÞöÅÙ!Föjc|ûFDðFÄfUî6QŒ—¯@@d±—²Mª,:fRí;K6숿€#ë†päÞ G%ŽPA€d±—³dÑ W=sÇÚ\sÏfY…î¿ÛÅ÷íƒÇÆM\轿žBuš0†å(zeŠBìS¢c(öœ›¶ïØ·Ë…î¿Û×S‹ªjÿÏ]â}@‘"@‘Š,(²(Ïc]õ\kc†Y§²Þ    
+C%€¼FQENÁË{£òΤØóuVì5ÄeÈ:M‘õÞhE%Šñ5QD¹{/g#È"$øäEy(ýùãMc;ÓêË×û"÷Íîð«_~°ëàáóÇê—vÍY³ûÓü3Û}þÃûomWi{˜[½»;ÙVïöŸþÔnxXrþçš¿ü`"Ä;ûä[sûм©ì½õ}ûØü¾ilGÜ—ÿa1¿ü»çÿð¤ÜÖ×»?l{Î×^ì¿jû}ò©ÙxÈù×ÿÿÿPK-!®ÄñQ"[Content_Types].xmlPK-!ùJ­¬öW 
sxl/styles.xmlPK-!é¦%¸‚Sü  xl/theme/theme1.xmlPK-!òñ%>e¯docProps/core.xmlPK-! pUŠ¡5$docProps/app.xmlPK-!Š¥aú`qûxl/workbook.xmlPK-!'¡Œ=Å5߈xl/worksheets/sheet1.xmlPK

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1"><title>    

</title>    
    <script type="text/javascript"> 
        function changeLabel(){ 
            document.getElementById("lblResult").innerHTML = "Please wait while your report is processed...";   
        }   
    </script>   
</head> 
<body>  

    <form method="post" action="Uploader.aspx" id="form1" enctype="multipart/form-data">    
<div class="aspNetHidden">  
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="+yve+0TnTzr8dZbqET3gRkZx/Pw9iGFmDqDyyfeTPMoXlPTPVgX3FrRUhTd3lBZE0DkzyUKzhXOi6MqTdxe1jnYL+mdzQiyoaM5w5cv9vij3X1xtsW8P1zACrDj6IqUK87n3GcwFtdHCCblAdgFI8nPQZsJnRv9w8lNIurcrbfad534ICOt8S/++vRi9+s91DFi3woIbFMyxw3rvbUPQwg==" />    
</div>  

<div class="aspNetHidden">  

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="C153B6F1" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="c3fKPUwILazJv1aW60quCxYtkspAHgetjdwMb7ugaEBN7qnUTTL7SrAVizVMaqXPAPqmyhDV0rtT1upkWYH9eOzqHjjmjvr9ZHty08BHB9OD/fCIuF8ExZbOqpiXOdGA" />


 </div> 


  <div> 
        <input type="file" name="fuReport" id="fuReport" style="width:306px;" />    
        <br />  
        <span id="lblResult">Report was successfully downloaded.</span> 
        <br />          
        <input type="submit" name="btnUpload" value="Upload" onclick="changeLabel();" id="btnUpload" /> 
    </div>      
    </form> 
</body> 
</html> 

然后我试着用HttpContext的替换所有响应code的如下所示:

I then tried replace all of the Response code with HTTPContext as shown here:

HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", strReportName))
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
HttpContext.Current.Response.Write(strReportName)
HttpContext.Current.ApplicationInstance.CompleteRequest()

这也下载一个.xls文件,但与网页的图形重新presentation。同样,我不能发布图片,但Excel文件打开,显示的文字,上传和放按钮;说:

This also downloads a .xls file but with a graphical representation of the webpage. Again, I cannot post a picture, but the Excel file opens to show the button with text, Upload & says:

报告已成功下载。

我已经研究了这个无解小时。我试图拉这个特殊的code出的try / catch的/终于为别人过成功与但这并没有帮助的。

I have researched this for HOURS with no solution. I have tried pulling this particular code out of the try/catch/finally as someone else had success with but this did not help either.

有谁知道我怎么能有正确的浏览器下载.xls文件与我NewReport的实际内容,而不是从aspx页面?

Does anybody know how I can properly have the browser download the .xls file with the actual contents of my NewReport instead of it containing information from the aspx page??

推荐答案

我放弃了做自动两种工艺的想法。我在一个下载按钮,只有一次报告已成功处理变为可见说。上click事件的下载按钮的,我有excel文件下载。这是多一个点击,比我想要的,但它能够完成任务。

I gave up on the idea of doing both processes automatically. I added in a Download button that only becomes visible once the report has been successfully processed. On the Download button's on click event, I have the excel file download. It's one more click than I wanted, but it gets the job done.

Protected Sub btnUpload_Click(sender As Object, e As EventArgs) Handles btnUpload.Click
If fuReport.HasFile Then
    Try        
        'All report processing occurs & report is created without issue   
        lblResult.Text = "Report was successfully processed."
        btnDownload.Visible = True  
    Catch
        lblResult.Text = "An error occurred. Please try again."
    Finally
        fuReport = New FileUpload()
    End Try
  Else
        lblResult.Text = "Please select a report to upload."
    End If
End Sub

Protected Sub btnDownload_Click(sender As Object, e As EventArgs) Handles btnDownload.Click
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", strReportName))
        Response.ContentType = "application/vnd.ms-excel"
        Response.WriteFile(strReportName)
        Response.End()
    End Sub
End Class

这篇关于下载.xls文件与Response.WriteFile下载与网页内容文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆