我有一個文件,它是完整路徑(加上文件名)是在這個變量:的TransmitFile不工作
fileTemporary
我想該文件下載到客戶端。
我這樣做:
HttpContext.Current.Response.TransmitFile(fileTemporary);
,但沒有發生,我的意思是,當我按一下按鈕,這個文件執行,但沒有被下載到客戶端。我沒有看到客戶端瀏覽器上的任何文件。
請問我做了什麼錯誤?
我有一個文件,它是完整路徑(加上文件名)是在這個變量:的TransmitFile不工作
fileTemporary
我想該文件下載到客戶端。
我這樣做:
HttpContext.Current.Response.TransmitFile(fileTemporary);
,但沒有發生,我的意思是,當我按一下按鈕,這個文件執行,但沒有被下載到客戶端。我沒有看到客戶端瀏覽器上的任何文件。
請問我做了什麼錯誤?
如果你使用MVC,您可以:
[HttpGet]
public virtual ActionResult GetFile(string fileTemporary)
{
// ...preparing file path... init fileTemporary.
var bytes = System.IO.File.ReadAllBytes(fileTemporary);
var fileContent = new FileContentResult(bytes, "binary/octet-stream");
Response.AddHeader("Content-Disposition", "attachment; filename=\"YourFileName.txt\"");
return fileContent;
}
如果使用ASP.NET或任何你可以用下面的(對不起,我的舊代碼,但是可以理解的做法):
var bytes = System.IO.File.ReadAllBytes(fileTemporary);
SendFileBytesToResponse(bytes, fileName);
public static bool SendFileBytesToResponse(byte[] bytes, string sFileName)
{
if (bytes!= null)
{
string downloadName = sFileName;
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Type", "binary/octet-stream");
response.AddHeader("Content-Disposition",
"attachment; filename=" + downloadName + "; size=" + bytes.Length.ToString());
response.Flush();
response.BinaryWrite(bytes);
response.Flush();
response.End();
}
return true;
}
沒有reingeneering您的解決方案:
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.AddHeader("Content-Type", "binary/octet-stream");
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition",
"attachment; filename=" + fileName);
System.Web.HttpContext.Current.Response.TransmitFile(fileName);
如果您想瀏覽器來解釋你的文件正確,你將需要指定標題「Content-Type」更精確。 請參閱list of content types
什麼是pdfByte?第二pleasei有一個具體的問題,我沒有要求重新設計我的解決方案。 –
使用你的代碼,我得到這個錯誤'未被捕獲的Sys.WebForms.PageRequestManagerParserErrorException:Sys.WebForms.PageRequestManagerParserErrorException:從服務器收到的消息無法解析。' –
Marco,瀏覽器需要http頭。這樣瀏覽器可以解釋流。 –
您是否在這一行上設置了斷點以確保它被擊中? 'fileTemporary'是否存在並且您是否正確指定了路徑?您的網站/應用程序是否有權訪問該文件和目錄?該文件是否爲空? –
你使用什麼瀏覽器?我會使用FireBug,IE的F12網絡監視器或Fiddler來查看實際發送到瀏覽器的內容。在確認您在C#端沒有收到任何錯誤後,我會這樣做。 – dman2306
@BobKaufman是的,我做了一個breakpint,它到達那裏。並且是fileTemporary存在。並首先我沒有permision,所以我得到的錯誤,我沒有該文件的權限,但後來我爲所有用戶的文件,然後我看到什麼都沒有被下載 –