Skip to main content

Initiates a direct external upload

POST 

/uploads/generate-presigned-put.json

Direct external uploads bypass the usual method of creating uploads via the POST /uploads route, and upload directly to an external provider, which by default is S3. This route begins the process, and will return a unique identifier for the external upload as well as a presigned URL which is where the file binary blob should be uploaded to.

Once the upload is complete to the external service, you must call the POST /complete-external-upload route using the unique identifier returned by this route, which will create any required Upload record in the Discourse database and also move file from its temporary location to the final destination in the external storage service.

You must have the correct permissions and CORS settings configured in your external provider. We support AWS S3 as the default. See:

https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4.

An external file store must be set up and enable_direct_s3_uploads must be set to true for this endpoint to function.

Request

Body

    type stringrequired

    Possible values: [avatar, profile_background, card_background, custom_emoji, composer]

    file_name stringrequired
    file_size integerrequired

    File size should be represented in bytes.

    metadata object
    sha1-checksum stringrequired

    The SHA1 checksum of the upload binary blob. Optionally be provided and serves as an additional security check when later processing the file in complete-external-upload endpoint.

Responses

external upload initialized

Schema
    key stringrequired

    The path of the temporary file on the external storage service.

    url stringrequired

    A presigned PUT URL which must be used to upload the file binary blob to.

    signed_headers objectrequired

    A map of headers that must be sent with the PUT request.

    unique_identifier stringrequired

    A unique string that identifies the external upload. This must be stored and then sent in the /complete-external-upload endpoint to complete the direct upload.

Loading...