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

时间:2016-10-05 11:01:11

标签: c# winforms dropbox

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);

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

1 个答案:

答案 0 :(得分:2)

我觉得你觉得这里太复杂了。 UploadAsync需要StreamMemoryStream确实是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文本也无法按预期工作,因为它会改变正在上传的内容。