aboutsummaryrefslogtreecommitdiff
path: root/uploader/files/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/files/views.py')
-rw-r--r--uploader/files/views.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/uploader/files/views.py b/uploader/files/views.py
index cd5f00f..ddf5350 100644
--- a/uploader/files/views.py
+++ b/uploader/files/views.py
@@ -8,6 +8,11 @@ from .chunks import chunk_name, chunks_directory
files = Blueprint("files", __name__)
+def target_file(fileid: str) -> Path:
+ """Compute the full path for the target file."""
+ return Path(app.config["UPLOAD_FOLDER"], fileid)
+
+
@files.route("/upload/resumable", methods=["GET"])
def resumable_upload_get():
"""Used for checking whether **ALL** chunks have been uploaded."""
@@ -21,9 +26,24 @@ def resumable_upload_get():
"statuscode": 400
}), 400
+ # If the complete target file exists, return 200 for all chunks.
+ _targetfile = target_file(fileid)
+ if _targetfile.exists():
+ return jsonify({
+ "uploaded-file": _targetfile.name,
+ "original-name": filename,
+ "chunk": chunk,
+ "message": "The complete file already exists.",
+ "statuscode": 200
+ }), 200
+
if Path(chunks_directory(fileid),
chunk_name(filename, chunk)).exists():
- return "OK"
+ return jsonify({
+ "chunk": chunk,
+ "message": f"Chunk {chunk} exists.",
+ "statuscode": 200
+ }), 200
return jsonify({
"message": f"Chunk {chunk} was not found.",
@@ -39,7 +59,7 @@ def __merge_chunks__(targetfile: Path, chunkpaths: tuple[Path, ...]) -> Path:
with open(chunkfile, "rb") as _chunkdata:
_target.write(_chunkdata.read())
- chunkfile.unlink()
+ chunkfile.unlink(missing_ok=True)
return targetfile
@@ -52,16 +72,15 @@ def resumable_upload_post():
"resumableFilename", default="", type=str) or ""
_fileid = request.form.get(
"resumableIdentifier", default="", type=str) or ""
- _targetfile = Path(app.config["UPLOAD_FOLDER"], _fileid)
+ _targetfile = target_file(_fileid)
if _targetfile.exists():
return jsonify({
- "message": (
- "A file with a similar unique identifier has previously been "
- "uploaded and possibly is/has being/been processed."),
- "error": "BadRequest",
- "statuscode": 400
- }), 400
+ "uploaded-file": _targetfile.name,
+ "original-name": _uploadfilename,
+ "message": "File was uploaded successfully!",
+ "statuscode": 200
+ }), 200
try:
chunks_directory(_fileid).mkdir(exist_ok=True, parents=True)
@@ -78,14 +97,14 @@ def resumable_upload_post():
chunks_directory(_fileid).rmdir()
return jsonify({
"uploaded-file": _targetfile.name,
+ "original-name": _uploadfilename,
"message": "File was uploaded successfully!",
"statuscode": 200
}), 200
return jsonify({
- "message": "Some chunks were not uploaded!",
- "error": "ChunksUploadError",
- "error-description": "Some chunks were not uploaded!"
- })
+ "message": f"Chunk {int(_chunk)} uploaded successfully.",
+ "statuscode": 201
+ }), 201
except Exception as exc:# pylint: disable=[broad-except]
msg = "Error processing uploaded file chunks."
app.logger.error(msg, exc_info=True, stack_info=True)