c# - 使用 C# 下载 URL Content-Disposition excel 文件
问题描述
我需要使用 C# 下载附加到 URL 的文件,并且我已经编写了这段代码:
var uri = new Uri("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");
var request = WebRequest.CreateHttp(uri);
var response = request.GetResponse();
string disposition = response.Headers["Content-Disposition"];
string filename = disposition.Substring(disposition.IndexOf("filename=") + 9).Replace("\"", "");
using (var fs = new FileStream(filename.Replace("/", "-"), FileMode.Create, FileAccess.Write, FileShare.None))
{
response.GetResponseStream().CopyTo(fs);
}
但是路径中保存的excel文件好像损坏了
解决方案
尝试调用您的 URL 时,我得到了禁止返回。在我的示例中,我使用了一个工作正常的不同 URL。
var request = WebRequest.CreateHttp("http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm");
var response = request.GetResponse();
using (var fs = new FileStream("king-james-bible.xlsm", FileMode.Create, FileAccess.Write, FileShare.None))
{
using (var stream = response.GetResponseStream())
{
stream.CopyTo(fs);
}
}
可能是您检索的文件本身已损坏吗?
根据新信息更新
好的,链接现在对我有用。您的问题是 Excel 文件是使用 gzip 编码发送的。下面的代码示例适用于您的 URL。
var request = WebRequest.CreateHttp("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");//"http://spreadsheetpage.com/downloads/xl/king-james-bible.xlsm");
var response = request.GetResponse();
string disposition = response.Headers["Content-Disposition"];
string filename = disposition.Substring(disposition.IndexOf("filename=") + 9).Replace("\"", "");
using (var fs = new FileStream(filename.Replace("/", "-"), FileMode.Create, FileAccess.Write, FileShare.None))
{
using (var stream = response.GetResponseStream())
{
using (GZipStream zipStream = new GZipStream(stream, CompressionMode.Decompress))
{
byte[] tempBytes = new byte[4096];
int i;
while ((i = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
{
fs.Write(tempBytes, 0, i);
}
}
}
}
我已将这篇文章中的信息用于 gzip 解码:How do you download and extract a gzipped file with C#?
推荐阅读
- kotlin - 我们可以制作一个模板函数来合并任意两个 T 对象吗?
- python - m4a文件中的帧字节流应该转换成什么数据类型?
- flutter - 如何使用预填充的 sqlite 数据库并从 Flutter 中的表中获取数据?
- javascript - 如何在 Next.js 中获取仅限 http 的 cookie 值?
- html - 为什么中间有一条白色的空线
- flutter - 颤振代码错误:类型“持续时间”不是“定时器”类型的子类型
- nginx-reverse-proxy - 从 Nginx 启动一个 azure webhock
- c++ - 使用 msvc2019 和 qt 6.1 调试断言失败,引用了一个不存在的文件
- r - 循环 UpSet 图
- javascript - 如何将值存储在柏树中的单独数组或变量中?