[英]How to download files with filename containing special characters using .Net WebClient
使用.Net WebClient下載文件名包含某些字符的文件時,出現錯誤“ 400 –錯誤的請求”:
例如,如果文件名為: 5L1XQE6FTest #.mp4
; 這會產生一個錯誤。
如果刪除#
號,則文件下載正常:
這是我的代碼:
public ActionResult DownloadVideoFile(string filepath)
{
try
{
filepath = "http://localhost:1832/VideoUploads/" + filepath;
var type = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
var path = Path.GetFileName(filepath);
using (var client = new WebClient())
{
var buffer = client.DownloadData(filepath);
return File(buffer, type.ToString(), path);
}
}
catch (Exception e)
{
var test = e.Message;
}
return null;
}
由於文件是用戶提交的,我無法控制要下載的文件名。
當我對文件進行網址編碼時,出現“找不到文件”錯誤:
using (var client = new WebClient())
{
filepath = Url.Encode(filepath);
var buffer = client.DownloadData(filepath);
return File(buffer, type.ToString(), path);
}
這是URL編碼后的路徑:
C:\\ Program Files(x86)\\ IIS Express \\ http%3a%2f%2flocalhost%3a1832%2fVideoUploads%2f5L1XQE6FTest +%23.mp4'
下載帶有特殊字符或保留字符的文件時,如何解決“錯誤請求”錯誤?
在代碼中什么時候實際引發了異常? WebClient
可以毫無問題地下載任何有效命名的資源(有效,因為它實際上起着URL的作用)。 如果您嘗試使用的URL實際上不是有效的URL(由於文件名是奇數),則對該URL進行編碼可能足以解決問題。
但是,您稍后還會使用錯誤的文件名作為File
的參數,這可能是一個壞主意。 如果這是引發異常的地方,那么只需構造自己的文件名而沒有問題字符,就足以解決問題。
請用#23替換#,它將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.