使用盒子.V2 API, DownloadStreamAsync调用导致文件损坏

本文关键字:调用 文件 损坏 DownloadStreamAsync 盒子 V2 API | 更新日期: 2023-09-27 18:02:34

我正在编写一个小程序,从Box.com帐户中提取文件。使用Box c# SDK,我有以下代码:

BoxFile file = await Client.FilesManager.GetInformationAsync(item.Id);
byte[] bytes = new byte[file.Size.Value];  
using (FileStream fileStream = new FileStream(dlg.FileName, FileMode.Create, System.IO.FileAccess.Write))
using (Stream stream = await Client.FilesManager.DownloadStreamAsync(file.Id))
{   
    stream.Read(bytes, 0, (int)file.Size.Value);
    fileStream.Write(bytes, 0, bytes.Length);
}

然而,当我试图拉一个图像的结果文件是一个图像与正确的宽度和高度,但只有顶部切片像素数据。图像的其余部分是黑色的。文件大小正确

如果我拉docx或pptx文件并在Word或PowerPoint中打开它们,我会得到一个损坏的文件消息。文件大小正确

如果文件是一个简单的txt文件,似乎是成功的。

我做错了什么?

使用盒子.V2 API, DownloadStreamAsync调用导致文件损坏

当数据从服务器返回时,stream将使内容以块的形式可用。单个stream.Read调用只获取第一个块,这就是为什么图像的顶部切片看起来是正确的,而图像的其余部分是空的。

要解决这个问题,请继续从流中读取,直到它表明没有额外的内容。

using (Stream stream = await Client.FilesManager.DownloadStreamAsync(file.Id))
{   
   int bytesRead;
   var buffer = new byte[8192];
   do
   {
       bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
       await fileStream.WriteAsync(buffer, 0, bytesRead);
   } while (bytesRead > 0);
}