使用 DropBox API 上传“.xlsx”文件导致文件损坏
Uploading ".xlsx" file using DropBox API making file corrupted
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 文本也无法按预期工作,因为它改变了上传的内容。
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 文本也无法按预期工作,因为它改变了上传的内容。