2016-10-05 7 views
-2
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, создающего файл, поврежден

+0

Не могли бы вы отлаживать и показывать нам исходную длину байта, длину байта в 'numBytes' и при нажатии' numBytes' в int. Я думаю, что длина слишком велика для int и поэтому считывает неправильное количество байтов в массив байтов из BinaryReader. – kevto

+0

Возможно, вы должны указать тег, связанный с используемым языком. –

+0

байты \t {byte [344669]} \t byte [] Вот длина массива байтов. –

ответ

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 не работает должным образом, поскольку оно изменяет загружаемый контент.

+0

Спасибо, что теперь он отлично работает –

Смежные вопросы