atst/js/lib/upload.js
2019-08-05 16:04:38 -04:00

84 lines
1.8 KiB
JavaScript

import Azure from 'azure-storage'
class AzureUploader {
constructor(sasToken) {
this.sasToken = sasToken.token
}
async upload(file, objectName) {
const blobService = Azure.createBlobServiceWithSas(
'https://atat.blob.core.windows.net',
this.sasToken
)
const fileReader = new FileReader()
const options = {
contentSettings: {
contentType: 'application/pdf',
},
metadata: {
filename: file.name,
},
}
return new Promise((resolve, reject) => {
fileReader.addEventListener('load', function(f) {
blobService.createBlockBlobFromText(
'task-order-pdfs',
`${objectName}.pdf`,
f.target.result,
options,
function(err, result) {
if (err) {
reject(err)
} else {
resolve(result)
}
}
)
})
fileReader.readAsText(file)
})
}
}
class AwsUploader {
constructor(presignedPost) {
this.presignedPost = presignedPost
}
async upload(file, objectName) {
const form = new FormData()
Object.entries(this.presignedPost.fields).forEach(([k, v]) => {
form.append(k, v)
})
form.append('file', file)
form.set('x-amz-meta-filename', file.name)
return fetch(this.presignedPost.url, {
method: 'POST',
body: form,
})
}
}
class MockUploader {
constructor(token) {
this.token = token
}
async upload(file, objectName) {
return Promise.resolve({})
}
}
export const buildUploader = token => {
const cloudProvider = process.env.CLOUD_PROVIDER || 'mock'
if (cloudProvider === 'aws') {
return new AwsUploader(token)
} else if (cloudProvider === 'azure') {
return new AzureUploader(token)
} else {
return new MockUploader(token)
}
}