繁体   English   中英

Howto:下载保存C#原始名称的文件?

[英]Howto: download a file keeping the original name in C#?

我有一个服务器上的文件,可以从这样格式的URL访问:http:// address / Attachments.aspx?id = GUID

我可以访问GUID,并且需要能够将多个文件下载到同一文件夹。

如果你把这个URL扔到浏览器中,你将下载该文件,它将具有原始文件名。

我想在C#中复制该行为。 我尝试过使用WebClient类的DownloadFile方法,但是必须指定一个新的文件名。 更糟糕的是,DownloadFile将覆盖现有文件。 我知道我可以为每个文件生成一个唯一的名称,但我真的很喜欢原始文件。

是否可以下载保留原始文件名的文件?

更新:

使用下面的精彩答案来使用WebReqest类,我提出了以下完美的工作:

    public override void OnAttachmentSaved(string filePath)
    {
        var webClient = new WebClient();

        //get file name
        var request = WebRequest.Create(filePath);
        var response = request.GetResponse();
        var contentDisposition = response.Headers["Content-Disposition"];
        const string contentFileNamePortion = "filename=";
        var fileNameStartIndex = contentDisposition.IndexOf(contentFileNamePortion, StringComparison.InvariantCulture) + contentFileNamePortion.Length;
        var originalFileNameLength = contentDisposition.Length - fileNameStartIndex;
        var originalFileName = contentDisposition.Substring(fileNameStartIndex, originalFileNameLength);

        //download file
        webClient.UseDefaultCredentials = true;
        webClient.DownloadFile(filePath, String.Format(@"C:\inetpub\Attachments Test\{0}", originalFileName));            
    }

只需要进行一些字符串操作即可获得实际的文件名。 我太激动了。 感谢大家!

正如评论中暗示的那样,文件名将在Content-Disposition标题中提供。 不确定如何在使用WebClient时获取其值,但使用WebRequest相当简单:

WebRequest request = WebRequest.Create("http://address/Attachments.aspx?id=GUID");
WebResponse response = request.GetResponse();
string originalFileName = response.Headers["Content-Disposition"];
Stream streamWithFileBody = response.GetResponseStream();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM