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.
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. –
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? –
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. –