Я использую boto3 для загрузки массивных медиа-файлов (2 ГБ +) с моего сайта Django в корзину хранения s3.Моя проблема заключается в том, что при загрузке файла размером более 2,5 МБ соединение немедленно блокируется, и никакой отладочной информации не отображается
- Я предполагаю, что Django использует временный обработчик загрузки файла, нообработчик временных файлов не будет работать на сервере, на котором запущено приложение Django (бесплатный уровень pythonanywhere).
- Это работает безупречно локально, потому что нужно просто скопировать в ОС, а не на сервер.Я хотел бы пропустить веб-сервер, поэтому я не использую все хранилище / полосу пропускания
s3.upload_file
нужен локальный путь к файлу, чтобы можно было загрузить его на S3, единственный способ, которым я могнайти для этого - захватить temp_path файла.
# method to chunk the upload process if file is over 2.4MB
def s3_multipart_upload(f, video_id):
# our server path
file_path = "media/"
new_folder = str(video_id)+"/"
file_name = f.name
server_path = file_path + new_folder + file_name
# the file gets copied to ~/tmp/ so grab that path
local_path = f.temporary_file_path()
# create s3 client connection
s3 = boto3.client('s3', settings.AWS_S3_REGION_NAME, **credentials)
config = TransferConfig(
multipart_threshold=1024 * 25,
max_concurrency=10,multipart_chunksize=1024 * 25,
use_threads=True
)
s3.upload_file(
local_path,
settings.AWS_STORAGE_BUCKET_NAME,
server_path,
ExtraArgs={'ACL': 'public-read'},
Config=config,
Callback = ProgressPercentage(local_path)
)
return
Я хотел бы иметь возможность загружать файлы прямо на S3, прямо с моего сайта, без файлов, проходящих через сервер (pythonв любом месте).Если есть более чистый способ сделать это, лучший сервер, который я должен использовать, или если есть способ загрузить файл, не копируя его во временную папку, - у меня все уши.
(я тоже новичокна Python / Django / Servers в целом, поэтому любая помощь приветствуется)