atst/js/lib/upload.js
2019-10-29 16:02:48 -04:00

80 lines
2.0 KiB
JavaScript

import Azure from 'azure-storage'
import 'whatwg-fetch'
class AzureUploader {
constructor(accountName, containerName, sasToken, objectName) {
this.accountName = accountName
this.containerName = containerName
this.sasToken = sasToken.token
this.objectName = objectName
}
async upload(file) {
const blobService = Azure.createBlobServiceWithSas(
`https://${this.accountName}.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', f => {
blobService.createBlockBlobFromText(
this.containerName,
`${this.objectName}`,
f.target.result,
options,
(err, result) => {
if (err) {
resolve({ ok: false })
} else {
resolve({ ok: true, objectName: this.objectName })
}
}
)
})
fileReader.readAsText(file)
})
}
downloadUrl(objectName) {
const blobService = Azure.createBlobServiceWithSas(
`https://${this.accountName}.blob.core.windows.net`,
this.sasToken
)
return blobService.getUrl(this.containerName, objectName, this.sasToken)
}
}
export class MockUploader {
constructor(token, objectName) {
this.token = token
this.objectName = objectName
}
async upload(file, objectName) {
return Promise.resolve({ ok: true, objectName: this.objectName })
}
}
export const buildUploader = (token, objectName) => {
const cloudProvider = process.env.CLOUD_PROVIDER || 'mock'
if (cloudProvider === 'azure') {
return new AzureUploader(
process.env.AZURE_ACCOUNT_NAME,
process.env.AZURE_CONTAINER_NAME,
token,
objectName
)
} else {
return new MockUploader(token, objectName)
}
}