def post_file():
file_uuid = secure_filename(str(uuid.uuid4()))
filename = '/tmp/%s' % file_uuid
try:
file = request.files['file']
except Exception:
raise BadRequestException("Not a valid multipart upload form with "
"key named file.")
if 'Content-Range' in request.headers:
# Extract starting byte from Content-Range header string.
range_str = request.headers['Content-Range']
start_bytes = int(range_str.split(' ')[1].split('-')[0])
# Append chunk to the file on disk, or create new.
with open(filename, 'a') as f:
f.seek(start_bytes)
f.write(file.stream.read())
else:
# This is not a chunked request, so just save the whole file.
file.save(filename)
# Generate hash of file, and create new, or renew existing db row.
file_hashes = get_all_hashes(filename)
file_size = os.path.getsize(filename)
file_type = magic.from_file(filename, mime=True)
file = create_or_renew_by_hash(file_hashes, file_size, file_type)
file_id = file.file_id
file_dict = file.to_dict()
# Upload to swift and remove the local temp file.
upload_to_swift(filename, file_uuid)
os.remove(filename)
# Send message to worker queue with file details.
worker_msg = {"file_uuid": file_uuid, "file_id": file_id}
submit_worker_notification(worker_msg)
return jsonify(file_dict)
评论列表
文章目录