2016-05-27 9 views
0

Microsoft ExcelファイルをOneDriveにアップロードしようとしていますが、そのたびにファイルが破損します。Microsoft Graph API BetaにExcelファイルをアップロードするときのファイル破損

我々はPUT設定には次の順列に要求するために、[これらの手順]を使用して試してみた:

コンテンツのエンコーディング:

  • テキスト/計画
  • アプリケーション/ vnd.openxmlformatsを-officedocument.spreadsheetml.sheet

POSTボディ:

  • XLSXファイルは、
  • XLSXファイルは、我々がアップロードされますファイルをダウンロードする場合、それはほとんど同じに見えます

BASE64としてエンコードされたディスク

  • XLSXファイルUTF8文字列としてエンコードからの生のバイトいくつかのバイナリ領域が異なります。

    インターネットからExcelファイルを開くのが気に入ったら、the file we uploadcorrupted file OneDrive savesの例をアップロードしました。

    これは、単一のパラメータ変更で修正できるバグの匂いがすべて...私はそれが何であるか把握できません。

    誰でも考えがありますか?ありがとう!

  • 答えて

    1

    ありがとう@GSM。ここで私たちのコードはTypeScriptです。

    var fileContent = FileSystem.readFileSync(localFile); 
    var url = `https://graph.microsoft.com/beta/me/drive/root/children/${doc.name}.xlsx:/content`, 
    
    var opts { 
        url: url, 
        method: 'PUT', 
        headers: [ 
        'Content-Type': 'text/plain', 
        'Authorization': token 
        ], 
        body: fileContent 
    }; 
    var requestOpts = { 
        url: `https://${domain}${opts.path}`, 
        method: opts.method, 
        headers: {}, 
    }; 
    
    request(opts, cb); 
    

    唯一の違いは、代替パスを使用してファイルをアップロードしていることです。このファイルは、GraphAPIページにも記載されています。

    { 
        "error": { 
        "code": "BadRequest", 
        "message": "Entity only allows writes with a JSON Content-Type header.", 
        "innerError": { 
         "request-id": "2a2e7588-3217-4337-bee3-f8aff208510c", 
         "date": "2016-05-30T16:35:50" 
        } 
        } 
    } 
    

    それは私はあなたのコードはどちらか働いているべきではないことを期待していますので、奇妙である..which:私たちは、あなたが使用しているパスを使用している場合、我々は戻って、エラーメッセージを取り戻します。

    アップデート - 答え

    文字列にファイルを読み込み、その後、PUTのパラメータを定義したJSONオブジェクトにそれを書き込むことにより、我々はそれを破壊されました。私たちは、開いているHTTPリクエストにファイルの読み込みストリームを配管するだけで、この問題を解決しました。

    0

    コードを投稿した方が手助けが簡単です。 ただし、OneDriveにファイルをアップロードするために使用できるコードは次のとおりです。私はあなたのファイルでそれをテストし、うまくアップロードしてダウンロードすることができました:

    using (var client = new HttpClient()) 
    { 
        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + t.AccessToken); 
    
        var byteContent = File.ReadAllBytes(@"C:\Temp\sheet-uploaded.xlsx"); 
        var url = resource + "beta/me/drive/root:/Documents/sheet-uploaded.xlsx:/content"; 
    
        var result = client.PutAsync(url, new ByteArrayContent(byteContent)).Result; 
        result.Content.ReadAsStringAsync().Dump(); 
    } 
    
    関連する問題