2017-05-23 5 views
0

autodesk forgeの認証に問題があります。場合によってはoss/v2/buckets/{key}/objects/{object}を呼び出すときに401を受け取ることがあります。 これはまれにしか発生しませんが、私がこれを複製できる方法の1つは、2つの異なるクライアントから2つの同一のファイルを同時にアップロードしようとしたときです。ファイルを同時にアップロードするときのautodesk forgeの認証の問題

このシナリオでは、通常動作する、またはブライアンFantana引用する - それはすべての時間を働く時間の

60%。

この問題を解決するにはどうすればよいですか?いくつかの指針は非常に役に立つでしょう。

ありがとうございます。

+0

このAPIコールは、ファイルにどのくらいの時間がかかりますか? 30分以上かかる場合は、期限切れになる前にリフレッシュする必要があります。 –

+0

お返事ありがとうございます。ファイルサイズは155MBであり、aproxをとった。アップロードするのに2分。同時にアップロードする際に、Autodeskの終了に制限がありますか? –

+0

Forgeバケットのアップロードファイルの合計サイズを確認できますか?私の経験によると、api 'oss/v2/buckets/{key}/objects/{object}'で20MBを超えるサイズのファイルをアップロードすることはできません。 –

答えて

1

あなた自身でこの問題を解決してもらえます。アップロードごとにトークンを更新すると今この問題は解決できるが、大きなファイルをチャンクでアップロードするにはbuckets/:bucketKey/objects/:objectName/resumableを使用することをおすすめします。

大きなファイルの場合は、公式documentのチャンクと呼ばれる小さな部分に分割し、 buckets/:bucketKey/objects/:objectName/resumable APIでアップロードすることをおすすめします。

private static dynamic resumableUploadFile() 
{ 
    Console.WriteLine("*****Start uploading file to the OSS"); 
    string path = FILE_PATH; 
    if (!File.Exists(path)) 
     path = @"..\..\..\" + FILE_PATH; 

    //File Total size   
    long fileSize = new System.IO.FileInfo(path).Length; 
    //Chunk size for separting file into several parts. 
    //2MB chuck size is used in this sample. 
    long chunkSize = 2 * 1024 * 1024 ; 
    //Total amounts of chunks in 2MB size. 
    long nbChunks = (long)Math.Round(0.5 + (double)fileSize/(double)chunkSize); 

    ApiResponse<dynamic> finalRes = null ; 
    using (FileStream streamReader = new FileStream(path, FileMode.Open)) 
    { 
    //Unique id for resumable uploading. 
    string sessionId = RandomString(12); 
    for (int i = 0; i < nbChunks; i++) 
    { 
     //Start position in bytes of a chunk 
     long start = i * chunkSize; 
     //End position in bytes of a chunk 
     //(End posistion of the latest chuck is the total file size in bytes) 
     long end = Math.Min(fileSize, (i + 1) * chunkSize) - 1; 

     //Identify chunk info. to the Forge 
     string range = "bytes " + start + "-" + end + "/" + fileSize; 
     //Steam size for this chunk 
     long length = end - start + 1; 

     Console.WriteLine("Uploading range: " + range); 

     //Read content stream into a meomery stream for this chunk 
     byte[] buffer = new byte[length]; 
     MemoryStream memoryStream = new MemoryStream(buffer); 

     int nb = streamReader.Read(buffer, 0, (int)length); 
     memoryStream.Write(buffer, 0, nb); 
     memoryStream.Position = 0; 

     //Upload file to the Forge OSS Bucket 
     ApiResponse<dynamic> response = objectsApi.UploadChunk(
              BUCKET_KEY, 
              FILE_NAME, 
              (int)length, 
              range, 
              sessionId, 
              memoryStream 
             ); 

     finalRes = response; 

     if (response.StatusCode == 202) { 
      Console.WriteLine("One chunk uploaded successfully"); 
      continue; 
     } 
     else if (response.StatusCode == 200) 
     { 
      Console.WriteLine("Final chunk uploaded successfully"); 
     } 
     else 
     { 
      //Some error occurred here 
      Console.WriteLine(response.StatusCode); 
      break; 
     } 
    } 

    } 

    return (finalRes); 
} 

・ホープ、このヘルプ:ここに私の同僚から、このAPIのthe Forge C# SDKのC#サンプルです。

+0

このソリューションを提供いただき、ありがとうございます。実装されており、うまく動作しているようです。これを正しい答えとして追加します。 –

0

この問題を解決するため、すべてのアップロード時に常にトークンの有効期限を更新する必要がありました。

関連する問題