2016-10-05 12 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バイト[] バイト配列の長さです。 –

答えて

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

今すぐご利用いただきありがとうございます –

関連する問題