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);
以下是代码,它会根据需要覆盖现有文件,但会使该文件损坏。
答案 0 :(得分:2)
我觉得你觉得这里太复杂了。 UploadAsync
需要Stream
。 MemoryStream
确实是Stream
,但FileStream
也是如此。摆脱额外的读者将导致:
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文本也无法按预期工作,因为它会改变正在上传的内容。