Pass objectName into upload constructor

This commit is contained in:
richard-dds 2019-08-19 16:30:23 -04:00
parent 27e0e16707
commit de090a319b
2 changed files with 19 additions and 14 deletions

View File

@ -106,7 +106,7 @@ export default {
getUploader: async function() {
return fetch('/upload-token', { credentials: "include" })
.then(response => response.json())
.then(({ token }) => buildUploader(token))
.then(({ token, objectName }) => buildUploader(token, objectName))
},
},

View File

@ -2,13 +2,14 @@ import Azure from 'azure-storage'
import 'whatwg-fetch'
class AzureUploader {
constructor(accountName, containerName, sasToken) {
constructor(accountName, containerName, sasToken, objectName) {
this.accountName = accountName
this.containerName = containerName
this.sasToken = sasToken.token
this.objectName = objectName
}
async upload(file, objectName) {
async upload(file) {
const blobService = Azure.createBlobServiceWithSas(
`https://${this.accountName}.blob.core.windows.net`,
this.sasToken
@ -27,14 +28,14 @@ class AzureUploader {
fileReader.addEventListener('load', f => {
blobService.createBlockBlobFromText(
this.containerName,
`${objectName}`,
`${this.objectName}`,
f.target.result,
options,
function(err, result) {
if (err) {
resolve({ ok: false })
} else {
resolve({ ok: true, objectName })
resolve({ ok: true, objectName: this.objectName })
}
}
)
@ -45,11 +46,12 @@ class AzureUploader {
}
class AwsUploader {
constructor(presignedPost) {
constructor(presignedPost, objectName) {
this.presignedPost = presignedPost
this.objectName = objectName
}
async upload(file, objectName) {
async upload(file) {
const form = new FormData()
Object.entries(this.presignedPost.fields).forEach(([k, v]) => {
form.append(k, v)
@ -62,31 +64,34 @@ class AwsUploader {
body: form,
})
return { ok: response.ok, objectName }
return { ok: response.ok, objectName: this.objectName }
}
}
class MockUploader {
constructor(token) {
constructor(token, objectName) {
this.token = token
this.objectName = objectName
console.log("built MockUploader")
}
async upload(file, objectName) {
return Promise.resolve({ ok: true, objectName })
return Promise.resolve({ ok: true, objectName: this.objectName })
}
}
export const buildUploader = token => {
export const buildUploader = (token, objectName) => {
const cloudProvider = process.env.CLOUD_PROVIDER || 'mock'
if (cloudProvider === 'aws') {
return new AwsUploader(token)
return new AwsUploader(token, objectName)
} else if (cloudProvider === 'azure') {
return new AzureUploader(
process.env.AZURE_ACCOUNT_NAME,
process.env.AZURE_CONTAINER_NAME,
token
token,
objectName
)
} else {
return new MockUploader(token)
return new MockUploader(token, objectName)
}
}