uppy/examples/aws-nodejs/public/index.html
github-actions[bot] 233435ff1e
Release: uppy@3.6.1 (#4348)
| Package         | Version | Package         | Version |
| --------------- | ------- | --------------- | ------- |
| @uppy/core      |   3.1.1 | uppy            |   3.6.1 |
| @uppy/dashboard |   3.3.1 |                 |         |

- @uppy/dashboard: Fix low-contrast hover styles (Alexander Zaytsev / #4347)
2023-03-07 11:37:58 +00:00

195 lines
7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Uppy AWS upload example</title>
<link href="https://releases.transloadit.com/uppy/v3.6.1/uppy.min.css" rel="stylesheet">
</head>
<body>
<h1>AWS upload example</h1>
<h2>AWS S3 (non multipart)</h2>
<div id="aws-non-multipart"></div>
<h2>AWS S3 multipart</h2>
<div id="aws-multipart"></div>
<script type="module">
import { Uppy, Dashboard, AwsS3Multipart, AwsS3 } from "https://releases.transloadit.com/uppy/v3.6.1/uppy.min.mjs"
{
const uppy = new Uppy()
.use(Dashboard, {
inline: true,
target: '#aws-non-multipart',
})
.use(AwsS3, {
async getUploadParameters (file) {
// Send a request to our Express.js signing endpoint.
const response = await fetch('/sign-s3', {
method: 'POST',
// Send and receive JSON.
headers: {
accept: 'application/json',
'content-type': 'application/json',
},
body: JSON.stringify({
filename: file.name,
contentType: file.type,
}),
})
if (!response.ok) throw new Error('Unsuccessful request', { cause: response })
// Parse the JSON response.
const data = await response.json()
// Return an object in the correct shape.
return {
method: data.method,
url: data.url,
fields: data.fields, // For presigned PUT uploads, this should be left empty.
// Provide content type header required by S3
headers: {
'Content-Type': file.type,
},
}
},
});
uppy.on('complete', (result) => {
console.log('Upload complete! Weve uploaded these files:', result.successful)
})
uppy.on('upload-success', (file, data) => {
console.log('Upload success! Weve uploaded this file:', file.meta['name'])
})
}
{
const uppy = new Uppy()
.use(Dashboard, {
inline: true,
target: '#aws-multipart',
})
.use(AwsS3Multipart, {
async createMultipartUpload(file, signal) {
if (signal?.aborted) {
const err = new DOMException('The operation was aborted', 'AbortError')
Object.defineProperty(err, 'cause', { __proto__: null, configurable: true, writable: true, value: signal.reason })
throw err
}
const metadata = {}
Object.keys(file.meta || {}).forEach(key => {
if (file.meta[key] != null) {
metadata[key] = file.meta[key].toString()
}
})
const response = await fetch('/s3/multipart', {
method: 'POST',
// Send and receive JSON.
headers: {
accept: 'application/json',
'content-type': 'application/json',
},
body: JSON.stringify({
filename: file.name,
type: file.type,
metadata,
}),
signal,
})
if (!response.ok) throw new Error('Unsuccessful request', { cause: response })
// Parse the JSON response.
const data = await response.json()
return data
},
async abortMultipartUpload (file, { key, uploadId }, signal) {
const filename = encodeURIComponent(key)
const uploadIdEnc = encodeURIComponent(uploadId)
const response = await fetch(`/s3/multipart/${uploadIdEnc}?key=${filename}`, {
method: 'DELETE',
signal,
})
if (!response.ok) throw new Error('Unsuccessful request', { cause: response })
},
async signPart (file, { uploadId, key, partNumber, signal }) {
if (signal?.aborted) {
const err = new DOMException('The operation was aborted', 'AbortError')
Object.defineProperty(err, 'cause', { __proto__: null, configurable: true, writable: true, value: signal.reason })
throw err
}
if (uploadId == null || key == null || partNumber == null) {
throw new Error('Cannot sign without a key, an uploadId, and a partNumber')
}
const filename = encodeURIComponent(key)
const response = await fetch(`/s3/multipart/${uploadId}/${partNumber}?key=${filename}`, { signal })
if (!response.ok) throw new Error('Unsuccessful request', { cause: response })
const data = await response.json()
return data
},
async listParts (file, { key, uploadId }, signal) {
if (signal?.aborted) {
const err = new DOMException('The operation was aborted', 'AbortError')
Object.defineProperty(err, 'cause', { __proto__: null, configurable: true, writable: true, value: signal.reason })
throw err
}
const filename = encodeURIComponent(key)
const response = await fetch(`/s3/multipart/${uploadId}?key=${filename}`, { signal })
if (!response.ok) throw new Error('Unsuccessful request', { cause: response })
const data = await response.json()
return data
},
async completeMultipartUpload (file, { key, uploadId, parts }, signal) {
if (signal?.aborted) {
const err = new DOMException('The operation was aborted', 'AbortError')
Object.defineProperty(err, 'cause', { __proto__: null, configurable: true, writable: true, value: signal.reason })
throw err
}
const filename = encodeURIComponent(key)
const uploadIdEnc = encodeURIComponent(uploadId)
const response = await fetch(`s3/multipart/${uploadIdEnc}/complete?key=${filename}`, {
method: 'POST',
headers: {
accept: 'application/json',
'content-type': 'application/json',
},
body: JSON.stringify({ parts }),
signal,
})
if (!response.ok) throw new Error('Unsuccessful request', { cause: response })
const data = await response.json()
return data
}
})
uppy.on('complete', (result) => {
console.log('Upload complete! Weve uploaded these files:', result.successful)
})
uppy.on('upload-success', (file, data) => {
console.log('Upload success! Weve uploaded this file:', file.meta['name'])
})
}
</script>
</body>
</html>