import os
from flask import current_app
from lin import Uploader
from werkzeug.utils import secure_filename
from .file import File
class LocalUploader(Uploader):
def upload(self):
ret = []
self.mkdir_if_not_exists()
site_domain = current_app.config.get(
"SITE_DOMAIN",
"http://{host}:{port}".format(
host=current_app.config.get("FLASK_RUN_HOST", "127.0.0.1"),
port=current_app.config.get("FLASK_RUN_PORT", "5000"),
),
)
for single in self._file_storage:
file_md5 = self._generate_md5(single.read())
single.seek(0)
exists = File.select_by_md5(file_md5)
if exists:
ret.append(
{
"key": single.name,
"id": exists.id,
"path": exists.path,
"url": site_domain + os.path.join(current_app.static_url_path, exists.path),
}
)
else:
absolute_path, relative_path, real_name = self._get_store_path(single.filename)
secure_filename(single.filename)
single.save(absolute_path)
file = File.create_file(
name=real_name,
path=relative_path,
extension=self._get_ext(single.filename),
size=self._get_size(single),
md5=file_md5,
commit=True,
)
ret.append(
{
"key": single.name,
"id": file.id,
"path": file.path,
"url": site_domain + os.path.join(current_app.static_url_path, file.path),
}
)
return ret