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

我正在开发一个小程序来从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文件,它似乎是成功的。

我究竟做错了什么?

当数据从服务器返回时, 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); }