我是一名Jr.程序员,试图从API获取mp4视频并将其保存到网络上的文件夹中。我使用以下代码;
public static void saveVideos(HttpContent content, String filename, bool overwrite)
{
string pathName = Path.GetFullPath(filename);
using (FileStream fs = new FileStream(pathName, FileMode.Create, FileAccess.Write, FileShare.None))
{
if (fs.CanWrite)
{
byte[] buffer = Encoding.UTF8.GetBytes(content.ToString());
fs.Write(buffer, 0, buffer.Length);
fs.Flush();
fs.Close();
}
}
}
代码编译时没有错误,但所有视频都写入大小为1KB的文件夹。我似乎无法弄清楚为什么我没有得到所有文件。
当我检查内容的值时,我看到我得到的数据看起来像这样:
Headers = {Content-Length: 240634544
Content-Disposition: attachment; filename=Orders.dat
Content-Type: application/x-www-form-urlencoded; charset=utf-8
有人可以在这里指出我的错误吗?
由于
答案 0 :(得分:4)
这不符合你的想法:
content.ToString()
除非被覆盖,否则.ToString()
的默认实现只会打印该类的名称。所以你要保存的是一堆带有类名的文件。
您可能寻找的内容是the .ReadAsStringAsync()
method。或者,因为您无论如何都将它转换为字节.ReadAsByteArrayAsync()
would also work。也许是这样的:
byte[] buffer = await content.ReadAsByteArrayAsync();
当然,由于这会使用await
,因此您的方法必须为async
:
public static async Task saveVideos(HttpContent content, String filename, bool overwrite)
如果您无法使用async
和await
(如果您使用的是较早的.NET版本),那么there are other ways to handle it as well。
编辑:根据评论和问题的某些上下文,您可能会在此处理大文件。在这种情况下,使用streams会更好。我目前没有任何示例代码,但基本上您要做的是将数据直接从一个流移动到另一个流而不是将其存储在内存变量中。
答案 1 :(得分:0)
如果其他人遇到问题或者学习如何使用FileStream保存文件,那么听到的是我用来解决问题的代码。
6