Skip to content

Information for doc: MUST respect server's request of upload type #124

@binn

Description

@binn

Simple

If VRChat returns an upload type of simple, you MUST respect it and upload all the data in one big HTTP request to S3.

In this scenario, you need to add the content-md5 and content-type headers to the request.

Multipart

Otherwise, if you get multipart, you HAVE to upload only 10485760 bytes at a time, and update your part number when doing startFileUpload.

The content-md5 and content-type headers MUST be omitted otherwise your request will be rejected.

It is expected that you calculate the number of required parts yourself.

An implementation of this goes as follows:

FileStream fs = File.Open("file.txt");

int chunkSize = 10485760;
byte[] buffer = new byte[chunkSize * 2];
int parts = (int)MathF.Max(1f, MathF.Floor((float)fs.Length / (float)chunkSize));
for(int part = 0; part <= parts; part++)
{
    int bytesToRead = part < parts ? chunkSize : (int)(fs.Length - fs.Position);
    int bytesRead = fs.Read(buffer, 0, bytesToRead);

   // example method
   var file = StartMultipartUpload(type, part);
   UploadToS3(buffer, bytesRead, file.URL);

   // VRChat throws an exception if bytesRead != bytesToRead
}

Queued

Not documented yet, not sure what queued does or means.

If this isn't explicitly followed, the file is rejected on the server end later on, with the S3 URL returning 403 Forbidden.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Priority: MediumNormal priorityType: EnhancementThis will **improve** existing or **add** something new

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions