我的问题是我不知道如何在知道文件名或文件扩展名的情况下下载文件,如http://findicons.com/icon/download/235456/internet_download/128/png?id=235724
我希望你能帮助我
答案 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);
}
}
上面的代码使用了某些方法和功能,您可以在这里找到更多信息:
HTTP
响应流时,您不需要寻找开头,因为它已经在开头,这样做会引发异常。所以,为了安全起见,请像上面的代码一样使用它。希望这个答案可以帮助你:)
答案 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