Есть ли способ обойти сервер, на котором находится мой сайт Django, при загрузке файлов, и просто вместо этого сразу загрузить на S3? - PullRequest
0 голосов
/ 19 февраля 2019

Я использую 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 в целом, поэтому любая помощь приветствуется)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...