上传“.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);
下面是代码,它根据需要覆盖现有的文件,但使该文件损坏。
我觉得你想得太复杂了。UploadAsync
期望一个Stream
。MemoryStream
确实是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文本也不能像预期的那样工作,因为它改变了上载的内容。