簡體   English   中英

如何使用.Net WebClient下載文件名包含特殊字符的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM