|
|
import hashlib |
|
|
import os |
|
|
|
|
|
|
|
|
def allowed_file(filename): |
|
|
""" |
|
|
Checks if the format for the file received is acceptable. For this |
|
|
particular case, we must accept only image files. This is, files with |
|
|
extension ".png", ".jpg", ".jpeg" or ".gif". |
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
filename : str |
|
|
Filename from werkzeug.datastructures.FileStorage file. |
|
|
|
|
|
Returns |
|
|
------- |
|
|
bool |
|
|
True if the file is an image, False otherwise. |
|
|
""" |
|
|
|
|
|
allowed_extensions = [".png", ".jpg", ".jpeg", ".gif"] |
|
|
|
|
|
return ( |
|
|
os.path.splitext(filename)[1].lower() in allowed_extensions |
|
|
) |
|
|
|
|
|
|
|
|
async def get_file_hash(file): |
|
|
""" |
|
|
Returns a new filename based on the file content using MD5 hashing. |
|
|
It uses hashlib.md5() function from Python standard library to get |
|
|
the hash. |
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
file : werkzeug.datastructures.FileStorage |
|
|
File sent by user. |
|
|
|
|
|
Returns |
|
|
------- |
|
|
str |
|
|
New filename based in md5 file hash. |
|
|
""" |
|
|
|
|
|
content = await file.read() |
|
|
|
|
|
|
|
|
file_hash = hashlib.md5( |
|
|
content |
|
|
).hexdigest() |
|
|
|
|
|
|
|
|
_, ext = os.path.splitext(file.filename) |
|
|
|
|
|
|
|
|
await file.seek(0) |
|
|
|
|
|
return f"{file_hash}{ext}" |
|
|
|