上传“.xlsx"文件使用DropBox API使文件损坏

本文关键字:文件 API 损坏 DropBox xlsx quot 上传 | 更新日期: 2023-09-27 18:11:32

DropboxClient dbx = new DropboxClient("************************");
var file = "/Excel/FileName.xlsx";
byte[] bytes = null;
FileStream fs = new FileStream("C:''Users''Admin''Desktop''Test.xlsx", FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = fs.Length;
bytes = br.ReadBytes((int)numBytes);
var mem = new MemoryStream(Encoding.UTF8.GetBytes(bytes.ToString()));
var updated = await dbx.Files.UploadAsync(file, WriteMode.Overwrite.Instance, body: mem);

下面是代码,它根据需要覆盖现有的文件,但使该文件损坏。

上传“.xlsx"文件使用DropBox API使文件损坏

我觉得你想得太复杂了。UploadAsync期望一个StreamMemoryStream确实是Stream,但FileStream也是。去掉额外的reader会导致:

var source = "C:''Users''Admin''Desktop''Test.xlsx";
var target = "/Excel/FileName.xlsx";
using(var dbx = new DropboxClient("***"))
using(var fs = new FileStream(source, FileMode.Open, FileAccess.Read))
{
    var updated = await dbx.Files.UploadAsync(
        target, WriteMode.Overwrite.Instance, body: fs);
}

文件损坏的原因是读取数据不正确。bytes.ToString()会导致System.Byte[]。你实际上上传的是System.Byte[]而不是文件的内容,这不是一个有效的Excel文档。另外,将二进制文件转换为UTF-8文本也不能像预期的那样工作,因为它改变了上载的内容。