2016-07-24 15 views
1

は、私がここで言及APIのUploadAsync()を使用してPDFファイルをアップロードしようとしている: https://www.dropbox.com/developers/documentation/dotnet#tutorialASP.NETのDropbox APIのアップロード.pdfファイル

ファイルがアップロードされますが、それが破損して開くことができない、I

System.IO.File.ReadAllText(fileUri); 

を使用してPDFファイルの内容を読み、その後のDropbox上のファイルに共有可能なリンクを返します。この機能を待っ経由でファイルをアップロード:

public static async Task<string> UploadFile(string folder, string fileName, string content) 
    { 
     using (var mem = new MemoryStream(Encoding.UTF8.GetBytes(content))) 
     { 
      FileMetadata updated = await dbx.Files.UploadAsync(
      folder + "/" + fileName, 
      WriteMode.Overwrite.Instance, 
      body: mem); 

      var arg1 = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(folder + "/" + fileName); 
      var share = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(arg1); 
      return share.Url; 
     } 
    } 

アップロードされたファイルに元の文字とは異なる文字が含まれているため、正しいエンコーディングが見つからないか、より良いアプローチがあると、エンコーディングに関連していることがわかりました。

ありがとうございます。

答えて

2

System.IO.File.ReadAllText(fileUri)は、ファイルのバイトを読み取り、文字列に変換します。 Encoding.UTF8を使用して文字列を書き込むと、コンテンツが変更されることがあります。

この変換をスキップし、バイトを直接使用してください。例えば。

var content = System.IO.File.ReadAllBytes(fileUri); 

そしてstring contentからbyte[] contentに関数を変更します。

public static async Task<string> UploadFile(string folder, string fileName, byte[] content) 
{ 
    using (var mem = new MemoryStream(content)) 
    { 
     FileMetadata updated = await dbx.Files.UploadAsync(
     folder + "/" + fileName, 
     WriteMode.Overwrite.Instance, 
     body: mem); 

     var arg1 = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(folder + "/" + fileName); 
     var share = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(arg1); 
     return share.Url; 
    } 
} 

この解決方法は、ファイル内容全体をメモリにコピーします。メモリ消費量に関しては、ファイルから直接読み取る方が効率的です。

public static async Task<string> UploadFile(string folder, string fileName, string fileUri) 
{ 
    using (var mem = new FileStream(fileUri, FileMode.Open, FileAccess.Read)) 
    { 
     FileMetadata updated = await dbx.Files.UploadAsync(
     folder + "/" + fileName, 
     WriteMode.Overwrite.Instance, 
     body: mem); 

     var arg1 = new Dropbox.Api.Sharing.CreateSharedLinkWithSettingsArg(folder + "/" + fileName); 
     var share = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(arg1); 
     return share.Url; 
    } 
} 
+0

私たちはタスクを達成するために別の方法を使用しましたが、あなたの答えに感謝しましたが、私はそれをテストしませんでした。 –

関連する問題