Get presigned upload token via ajax request
This commit is contained in:
parent
b7f8152cc1
commit
7d1dfa1d0e
@ -13,6 +13,7 @@ UNPROTECTED_ROUTES = [
|
|||||||
"atst.helpdocs",
|
"atst.helpdocs",
|
||||||
"static",
|
"static",
|
||||||
"atst.about",
|
"atst.about",
|
||||||
|
"atst.upload_token",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ from flask import (
|
|||||||
request,
|
request,
|
||||||
make_response,
|
make_response,
|
||||||
current_app as app,
|
current_app as app,
|
||||||
|
jsonify,
|
||||||
)
|
)
|
||||||
|
|
||||||
from jinja2.exceptions import TemplateNotFound
|
from jinja2.exceptions import TemplateNotFound
|
||||||
@ -41,6 +42,14 @@ def root():
|
|||||||
return render_template("login.html", redirect_url=redirect_url)
|
return render_template("login.html", redirect_url=redirect_url)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/upload-token")
|
||||||
|
def upload_token():
|
||||||
|
(token, object_name) = app.csp.files.get_token()
|
||||||
|
render_args = {"token": token, "objectName": object_name}
|
||||||
|
|
||||||
|
return jsonify(render_args)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/help")
|
@bp.route("/help")
|
||||||
@bp.route("/help/<path:doc>")
|
@bp.route("/help/<path:doc>")
|
||||||
def helpdocs(doc=None):
|
def helpdocs(doc=None):
|
||||||
|
@ -17,9 +17,7 @@ from atst.utils.flash import formatted_flash as flash
|
|||||||
|
|
||||||
|
|
||||||
def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None):
|
def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None):
|
||||||
(token, object_name) = current_app.csp.files.get_token()
|
render_args = {}
|
||||||
render_args = {"token": token, "object_name": object_name}
|
|
||||||
|
|
||||||
if task_order_id:
|
if task_order_id:
|
||||||
task_order = TaskOrders.get(task_order_id)
|
task_order = TaskOrders.get(task_order_id)
|
||||||
portfolio_id = task_order.portfolio_id
|
portfolio_id = task_order.portfolio_id
|
||||||
|
@ -20,12 +20,6 @@ export default {
|
|||||||
|
|
||||||
props: {
|
props: {
|
||||||
name: String,
|
name: String,
|
||||||
token: {
|
|
||||||
type: Object,
|
|
||||||
},
|
|
||||||
objectName: {
|
|
||||||
type: String,
|
|
||||||
},
|
|
||||||
initialData: {
|
initialData: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
@ -52,8 +46,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
created: function() {
|
created: async function() {
|
||||||
this.uploader = buildUploader(this.token)
|
|
||||||
emitEvent('field-mount', this, {
|
emitEvent('field-mount', this, {
|
||||||
optional: this.optional,
|
optional: this.optional,
|
||||||
name: this.name,
|
name: this.name,
|
||||||
@ -71,13 +64,12 @@ export default {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await this.uploader.upload(file, this.objectName)
|
const uploader = await this.getUploader()
|
||||||
|
const response = await uploader.upload(file, this.objectName)
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
this.attachment = e.target.value
|
this.attachment = e.target.value
|
||||||
this.$refs.attachmentFilename.value = file.name
|
this.$refs.attachmentFilename.value = file.name
|
||||||
this.$refs.attachmentObjectName.value = this.objectName
|
this.$refs.attachmentObjectName.value = response.objectName
|
||||||
this.$refs.attachmentInput.disabled = true
|
|
||||||
} else {
|
} else {
|
||||||
this.uploadError = true
|
this.uploadError = true
|
||||||
}
|
}
|
||||||
@ -111,6 +103,11 @@ export default {
|
|||||||
this.uploadError = false
|
this.uploadError = false
|
||||||
this.sizeError = false
|
this.sizeError = false
|
||||||
},
|
},
|
||||||
|
getUploader: async function() {
|
||||||
|
return fetch('/upload-token')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(({ token }) => buildUploader(token))
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -34,7 +34,7 @@ class AzureUploader {
|
|||||||
if (err) {
|
if (err) {
|
||||||
resolve({ ok: false })
|
resolve({ ok: false })
|
||||||
} else {
|
} else {
|
||||||
resolve({ ok: true })
|
resolve({ ok: true, objectName })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -57,10 +57,12 @@ class AwsUploader {
|
|||||||
form.append('file', file)
|
form.append('file', file)
|
||||||
form.set('x-amz-meta-filename', file.name)
|
form.set('x-amz-meta-filename', file.name)
|
||||||
|
|
||||||
return fetch(this.presignedPost.url, {
|
const response = await fetch(this.presignedPost.url, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: form,
|
body: form,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return { ok: response.ok, objectName }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +72,7 @@ class MockUploader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async upload(file, objectName) {
|
async upload(file, objectName) {
|
||||||
return Promise.resolve({ ok: true })
|
return Promise.resolve({ ok: true, objectName })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
v-bind:watch='{{ watch | string | lower }}'
|
v-bind:watch='{{ watch | string | lower }}'
|
||||||
name='{{ field.name }}'
|
name='{{ field.name }}'
|
||||||
:optional='false'
|
:optional='false'
|
||||||
v-bind:token='{{ token | tojson }}'
|
|
||||||
v-bind:object-name='"{{ object_name | string }}"'
|
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<div v-show="hasAttachment" class="uploaded-file">
|
<div v-show="hasAttachment" class="uploaded-file">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user