Create a signed upload URL for a file upload. This method is ideal when you want to authorize server side but upload on the client; check out this doc for more details.
All the information about the upload such as the name, group, keyvalues, etc. must be part of the signed URL in order for those values to go through. If you have a basic signed URL with no extra parameters and then try to add fields like name, group, etc. they will not go through.
Usage
import { PinataSDK } from "pinata";
const pinata = new PinataSDK({
pinataJwt: process.env.PINATA_JWT!,
pinataGateway: "example-gateway.mypinata.cloud",
});
const signedURL = await pinata.upload.private.createSignedURL({
expires: 30
});
const upload = await pinata.upload.private
.file(file)
.url(signedURL)
Returns
The full signed URL
https://uploads.pinata.cloud/v3/files/209bb44c-e987-47c4-a9e3-a88e02d4d8e9?X-Algorithm=PINATA2&X-Date=1734379351&X-Expires=300&X-Method=%5B%22HEAD%22%2C%22PATCH%22%2C%22POST%22%5D&X-User-ID=eb73db21-10fa-4005-b97c-639e19e82d60&X-Signature=<SIGNATURE>
Parameters
expires
The number of seconds the signed URL should be valid for
const url = await pinata.upload.private.createSignedURL({
expires: 30,
});
name (Optional)
Name for the file to be uploaded
const url = await pinata.upload.private.createSignedURL({
expires: 30,
name: "My Cool File"
});
mimeTypes (Optional)
Specify allowed file mime types and prevent uploads from files that do not match. Accepts wildcard mime types as well.
const url = await pinata.upload.private.createSignedURL({
expires: 30,
mimeTypes: [
"image/*",
"application/json"
]
});
maxFileSize (Optional)
Restrict upload to a specified file size in bytes
const url = await pinata.upload.private.createSignedURL({
expires: 30,
maxFileSize: 50000 // 50kb
});
groupId (Optional)
The target groupId the file would be uploaded to
const url = await pinata.upload.private.createSignedURL({
expires: 30,
groupId: "ad4bc3bf-8794-49e7-94ff-fea1ce745779"
});
keyvalues (Optional)
- Type:
Record<string, string>
Keyvalue pairs for the uploaded file
const url = await pinata.upload.private.createSignedURL({
expires: 30,
keyvalues: {
env: "prod"
}
});
vectorize (Optional)
Vectorize the file on upload
const url = await pinata.upload.private.createSignedURL({
expires: 30,
vectorize: true
});
date (Optional)
A UNIX timestamp of the date a URL is signed
const date = Math.floor(new Date().getTime() / 1000);
//date: 1724943711
const url = await pinata.upload.private.createSignedURL({
expires: 30,
date: date
});