2017-05-23 3 views
0

Ich habe Probleme mit der Autodesk-Forge-Autorisierung. Gelegentlich erhalte ich eine 401 beim Anruf oss/v2/buckets/{key}/objects/{object}. Dies tritt nur selten auf, aber erwähnenswert ist, dass ich dies zum Beispiel replizieren konnte, als ich versuchte, zwei identische Dateien gleichzeitig von zwei verschiedenen Clients hochzuladen.Autorisierungsprobleme bei Autodesk forge beim gleichzeitigen Hochladen von Dateien

Dieses Szenario funktioniert in der Regel, oder Brian Fantana zu zitieren -

60% der Zeit, es jedes Mal funktioniert.

Wie kann ich dieses Problem lösen? Eine Anleitung wäre sehr hilfreich.

Vielen Dank im Voraus.

+0

Wie lange dauert dieser API-Aufruf für Ihre Dateien? Wenn es länger als 30 Minuten dauert, sollte das verwendete Token aktualisiert werden, bevor es abläuft. –

+0

Vielen Dank für Ihre Antwort. Die Dateigröße war 155mb und dauerte ca. 2 Minuten zum Hochladen. Kann das Autodesk-Ende beim gleichzeitigen Hochladen begrenzt sein? –

+0

Könnten Sie die Gesamtgröße der hochgeladenen Dateien in Ihrem Forge-Bucket für mich überprüfen? Meiner Erfahrung nach wird es nicht möglich sein, Dateien mit einer Größe von mehr als 20 MB mit dem API-Tool/v2/buckets/{key}/objects/{object} 'hochzuladen. –

Antwort

1

Es ist gut zu hören, dass Sie dieses Problem selbst lösen. Obwohl dieses Problem jetzt durch Aktualisieren eines Tokens bei jedem Upload behoben werden kann, wird empfohlen, große Dateien in Chunks mit hochzuladen.

Für große Dateien, wird empfohlen, in mehrere kleine Teile von der buckets/:bucketKey/objects/:objectName/resumable API, um die Stücke in der offiziellen document und hochgeladen genannt getrennt werden. Hier ist eine C# Probe von the Forge C# SDK für diese API von meinem Kollegen:

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); 
} 

Hope this Hilfe.

+0

Vielen Dank für die Bereitstellung dieser Lösung. Es ist implementiert und scheint gut zu funktionieren. Ich füge das als die richtige Antwort hinzu. –

0

Um dieses Problem zu beheben, musste ich die Ablaufzeit ändern, damit das Token bei jedem Upload aktualisiert wird.

Verwandte Themen