如何在网址

时间:2016-05-14 15:21:19

标签: c#

我的问题是我不知道如何在知道文件名或文件扩展名的情况下下载文件,如http://findicons.com/icon/download/235456/internet_download/128/png?id=235724

我希望你能帮助我

3 个答案:

答案 0 :(得分:2)

由于服务器正在发送Content-Disposition标头,因此可以获取文件名。以下是有关如何使用HttpClient类获取文件名的代码示例:

var url = "http://findicons.com/icon/download/235456/internet_download/128/png?id=235724";

using (var client = new HttpClient())
using (var response = await client.GetAsync(url))
{
    // make sure our request was successful
    response.EnsureSuccessStatusCode();

    // read the filename from the Content-Disposition header
    var filename = response.Content.Headers.ContentDisposition.FileName;

    // read the downloaded file data
    var stream = await response.Content.ReadAsStreamAsync();

    // Where you want the file to be saved
    var destinationFile = Path.Combine("C:\\local\\directory", filename);

    // write the steam content into a file
    using (var fileStream = File.Create(destinationFile))
    {
        stream.CopyTo(fileStream);
    }
}

答案 1 :(得分:1)

您可以使用HTTP请求检查Content-Disposition响应标头以获取文件名。这将是一个更通用的解决方案,因此即使文件名未包含在URL中,它也可以工作:

var url = "http://findicons.com/icon/download/235456/internet_download/128/png?id=235724";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    var fn = response.Headers["Content-Disposition"].Split(new string[] { "=" }, StringSplitOptions.None)[1];
    string basePath = @"X:\Folder\SubFolder"; // Change accordingly...
    var responseStream = response.GetResponseStream();
    using (var fileStream = File.Create(Path.Combine(basePath, fn)))
    {
        responseStream.CopyTo(fileStream);
    }
}

上面的代码使用了某些方法和功能,您可以在这里找到更多信息:

希望这个答案可以帮助你:)

答案 2 :(得分:0)

我自己很难解决这个问题,并找到解决方案来解决与自动获取文件名有关的一些问题。

某些标头不包含内容处理,如中所述 https://stackoverflow.com/a/37228939/8805908,但仍在使用。

我想知道Chrome,firefox等如何获取文件的名称,尽管此信息无法通过任何标头条目获得。我发现没有信息的链接可以通过其URL导出,我从中使用以下代码:

http://codesnippets.fesslersoft.de/how-to-get-the-filename-of-url-in-c-and-vb-net/

到目前为止我的结论是;检查内容处理的标题,如果这不包含任何信息,请检查任何文件匹配的URL。到目前为止,我还没有找到一个我无法检索文件名的下载链接。

我希望这可以解决一些问题。

---编辑12-06-2018

使用这些方法的解决方案满足以下链接: 5 test cases