fix(upload): Fix uploading / dropping a folder
Issues: - the `storage_path` being dropped to wasn't being considered when computing new document's `storage_path` - include `original_filename` when computing filename - add try/catch in `get_file_from_gcs` - support dropping folders anywhere in the app
This commit is contained in:
parent
892b033cdd
commit
f8d16dcf4b
@ -268,7 +268,8 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
this.fileLeave(true)
|
this.fileLeave(true)
|
||||||
let storagePathId = parseInt(this.route.snapshot.queryParams['spid'])
|
let storagePathId = parseInt(this.route.snapshot.queryParams['spid'])
|
||||||
storagePathId = !isNaN(storagePathId) ? storagePathId : undefined
|
storagePathId = !isNaN(storagePathId) ? storagePathId : undefined
|
||||||
this.uploadDocumentsService.uploadFiles(files, { storagePathId })
|
const isUploadWithFolders = files.every(f => 'fullPath' in f.fileEntry && typeof f.fileEntry.fullPath === 'string' && (f.fileEntry.fullPath as string).split('/').filter(s => !!s).length > 1)
|
||||||
|
this.uploadDocumentsService.uploadFiles(files, { storagePathId, isUploadWithFolders })
|
||||||
this.toastService.showInfo($localize`Initiating upload...`, 3000)
|
this.toastService.showInfo($localize`Initiating upload...`, 3000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -607,8 +607,22 @@ class Consumer(LoggingMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if self.full_path:
|
if self.full_path:
|
||||||
|
# e.g. full_path: "/CDV#3500648756/OR#1161.pdf"
|
||||||
|
# e.g. ['CDV#3500648756']
|
||||||
folders = self.full_path.split('/')[:-1]
|
folders = self.full_path.split('/')[:-1]
|
||||||
|
# remove empty values from splitting the leading slash
|
||||||
folders = [i for i in folders if i]
|
folders = [i for i in folders if i]
|
||||||
|
|
||||||
|
# e.g. user dropped the file in storage path id 26
|
||||||
|
# which is "folder_test" or "test/test2/test3"
|
||||||
|
if document.storage_path:
|
||||||
|
# e.g. ['test', 'test2', 'test3']
|
||||||
|
parent_folders = document.storage_path.path.split('/')
|
||||||
|
# just double check that there are no empty values from leading slashes
|
||||||
|
parent_folders = [i for i in parent_folders if i]
|
||||||
|
# e.g. "test/test2/test3/CDV#3500648756"
|
||||||
|
folders = parent_folders + folders
|
||||||
|
|
||||||
folder_path = '/'.join(folders)
|
folder_path = '/'.join(folders)
|
||||||
print(f'folder_path: {folder_path}')
|
print(f'folder_path: {folder_path}')
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from pathlib import PurePath
|
from pathlib import PurePath
|
||||||
|
# import uuid
|
||||||
|
|
||||||
import pathvalidate
|
import pathvalidate
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -124,6 +125,9 @@ def generate_unique_filename(doc, archive_filename=False):
|
|||||||
counter += 1
|
counter += 1
|
||||||
else:
|
else:
|
||||||
return new_filename
|
return new_filename
|
||||||
|
# new_filename = str(uuid.uuid4()) + ".pdf"
|
||||||
|
# if not os.path.exists(os.path.join(root, new_filename)):
|
||||||
|
# return new_filename
|
||||||
|
|
||||||
|
|
||||||
def generate_filename(
|
def generate_filename(
|
||||||
@ -141,7 +145,7 @@ def generate_filename(
|
|||||||
f"Document has storage_path {doc.storage_path.id} "
|
f"Document has storage_path {doc.storage_path.id} "
|
||||||
f"({doc.storage_path.path}) set",
|
f"({doc.storage_path.path}) set",
|
||||||
)
|
)
|
||||||
filename_format = doc.storage_path.path
|
filename_format = doc.storage_path.path + '/' + doc.original_filename
|
||||||
|
|
||||||
if filename_format is not None:
|
if filename_format is not None:
|
||||||
tags = defaultdictNoStr(
|
tags = defaultdictNoStr(
|
||||||
|
@ -30,6 +30,7 @@ def upload_file(source, target):
|
|||||||
blob.upload_from_file(read_file_2)
|
blob.upload_from_file(read_file_2)
|
||||||
|
|
||||||
def get_file_from_gcs(bucket_path):
|
def get_file_from_gcs(bucket_path):
|
||||||
|
try:
|
||||||
if (not client) or (not bucket):
|
if (not client) or (not bucket):
|
||||||
raise Exception("Google Cloud Storage is not initialized.")
|
raise Exception("Google Cloud Storage is not initialized.")
|
||||||
|
|
||||||
@ -47,3 +48,8 @@ def get_file_from_gcs(bucket_path):
|
|||||||
|
|
||||||
# print("Returning downloaded file to caller")
|
# print("Returning downloaded file to caller")
|
||||||
return byte_stream
|
return byte_stream
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def exists():
|
||||||
|
return False
|
Loading…
x
Reference in New Issue
Block a user