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