Azure file downloads
This commit is contained in:
parent
094e44a6b0
commit
b182307174
@ -6,6 +6,9 @@ class Uploader:
|
||||
def generate_token(self):
|
||||
pass
|
||||
|
||||
def generate_download_link(self, object_name, filename):
|
||||
pass
|
||||
|
||||
def object_name(self):
|
||||
return str(uuid4())
|
||||
|
||||
@ -17,6 +20,9 @@ class MockUploader(Uploader):
|
||||
def get_token(self):
|
||||
return ({}, self.object_name())
|
||||
|
||||
def generate_download_link(self, object_name, filename):
|
||||
return ""
|
||||
|
||||
|
||||
class AzureUploader(Uploader):
|
||||
def __init__(self, config):
|
||||
@ -53,6 +59,21 @@ class AzureUploader(Uploader):
|
||||
)
|
||||
return ({"token": sas_token}, object_name)
|
||||
|
||||
def generate_download_link(self, object_name, filename):
|
||||
account = CloudStorageAccount(
|
||||
account_name=self.account_name, account_key=self.storage_key
|
||||
)
|
||||
bbs = account.create_block_blob_service()
|
||||
sas_token = bbs.generate_blob_shared_access_signature(
|
||||
self.container_name,
|
||||
object_name,
|
||||
permission=BlobPermissions.READ,
|
||||
expiry=datetime.utcnow() + self.timeout,
|
||||
content_disposition=f"attachment; filename={filename}",
|
||||
protocol="https"
|
||||
)
|
||||
return bbs.make_blob_url(self.container_name, object_name, protocol="https", sas_token=sas_token)
|
||||
|
||||
|
||||
class AwsUploader(Uploader):
|
||||
def __init__(self, config):
|
||||
|
@ -17,8 +17,9 @@ from atst.models.permissions import Permissions
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
|
||||
|
||||
def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None):
|
||||
render_args = {}
|
||||
def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None, extra_args=None):
|
||||
render_args = extra_args or {}
|
||||
|
||||
if task_order_id:
|
||||
task_order = TaskOrders.get(task_order_id)
|
||||
portfolio_id = task_order.portfolio_id
|
||||
@ -114,10 +115,14 @@ def edit(task_order_id):
|
||||
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_1")
|
||||
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
|
||||
def form_step_one_add_pdf(portfolio_id=None, task_order_id=None):
|
||||
(token, object_name) = current_app.uploader.get_token()
|
||||
extra_args = {"token": token, "object_name": object_name}
|
||||
|
||||
return render_task_orders_edit(
|
||||
"task_orders/step_1.html",
|
||||
portfolio_id=portfolio_id,
|
||||
task_order_id=task_order_id,
|
||||
extra_args=extra_args,
|
||||
)
|
||||
|
||||
|
||||
@ -219,11 +224,19 @@ def submit_form_step_three_add_clins(task_order_id):
|
||||
def form_step_four_review(task_order_id):
|
||||
task_order = TaskOrders.get(task_order_id)
|
||||
|
||||
(token, object_name) = current_app.uploader.get_token()
|
||||
extra_args = {
|
||||
"token": token,
|
||||
"object_name": object_name,
|
||||
"pdf_download_url": current_app.uploader.generate_download_link(task_order.pdf.object_name, task_order.pdf.filename)
|
||||
}
|
||||
|
||||
if task_order.is_completed == False:
|
||||
raise NoAccessError("task order form review")
|
||||
|
||||
return render_task_orders_edit(
|
||||
"task_orders/step_4.html", task_order_id=task_order_id
|
||||
"task_orders/step_4.html", task_order_id=task_order_id,
|
||||
extra_args=extra_args,
|
||||
)
|
||||
|
||||
|
||||
|
@ -43,6 +43,14 @@ class AzureUploader {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
class AwsUploader {
|
||||
@ -58,6 +66,7 @@ class AwsUploader {
|
||||
})
|
||||
form.append('file', file)
|
||||
form.set('x-amz-meta-filename', file.name)
|
||||
form.set('Content-Type', 'application/pdf')
|
||||
|
||||
const response = await fetch(this.presignedPost.url, {
|
||||
method: 'POST',
|
||||
|
@ -13,7 +13,7 @@
|
||||
<div class="h3">
|
||||
{{ 'task_orders.review.pdf_title' | translate }}
|
||||
</div>
|
||||
<a class="icon-link icon-link--download" href="{{ url_for('task_orders.download_task_order_pdf', task_order_id=task_order.id) }}">
|
||||
<a class="icon-link icon-link--download" href="{{ pdf_download_url }}">
|
||||
{{ Icon('check-circle-solid') }}
|
||||
{{ task_order.pdf.filename }}
|
||||
</a>
|
||||
|
Loading…
x
Reference in New Issue
Block a user