Как разрешить загрузку больших файлов на Django
У меня есть сайт www.theraplounge.co, который позволяет пользователям загружать видео. Проблема в том, что наши ограничения на размер файлов слишком малы. Как я могу увеличить размер файла, который пользователи могут загружать через мое поле Forms.py FileField? Кстати, в настоящее время я использую Amazon S3.
 Вы должны иметь возможность настроить его через DATA_UPLOAD_MAX_MEMORY_SIZE или/и FILE_UPLOAD_MAX_MEMORY_SIZE атрибуты настройки (помните, что вы должны указать значение в байтах).
Проверить:
https://docs.djangoproject.com/en/4.0/ref/settings/#std-setting-DATA_UPLOAD_MAX_MEMORY_SIZE
https://docs.djangoproject.com/en/4.0/ref/settings/#std-setting-FILE_UPLOAD_MAX_MEMORY_SIZE
Проблема заключается в 30-секундном таймауте heroku, так как я обнаружил, что большие файлы загружаются на сервере разработки, но не на рабочем сервере. Решением может быть загрузка файлов во внешнем интерфейсе с помощью javascript, так как это не загружает браузер. В настоящее время я пытаюсь использовать Javascript AWS SDK для загрузки видеофайлов во внешнем интерфейсе. Я получил код для работы с маленькими файлами размером менее 30 МБ, но я столкнулся с проблемой загрузки больших файлов. Ниже я разместил рабочий код Javascript AWS SDK:
    <div>
    <input type="file" id="fileUpload">
</div>
<div>
<button onclick="s3upload()">Submit</button>
</div>
    <script type="text/javascript">
  function s3upload() { 
    AWS.config.region = 'us-east-1'; // Region
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
        IdentityPoolId: 'MY-COGNITO-CREDITIONS',
    });
    var files = document.getElementById('fileUpload').files;
    if (files) 
    {
        var file = files[0];
        var fileName = file.name;
        var fileUrl = 'https://theraplounge.s3.amazonaws.com/' + fileName;
        var s3 = new AWS.S3({apiVersion: '2006-03-01'}); 
        var params = {
            Bucket: 'MY-BUCKET-NAME',
            Key: fileName,
            Body: file,
        };
        var s3 = new AWS.S3({apiVersion: '2006-03-01'});  
        var options = {partSize: 5 * 1024 * 1024, queueSize: 1};
   
        s3.upload(params, options, function(err, data) {
                if(err) {
                    alert('error');
                } else{
                alert('uploaded suceessfully')
                };
        });
        console.log(s3)
    }
  };
</script>
Это правильный подход, так как он не загружает браузер вообще, но я не могу заставить его загружать большие файлы. Как только я найду рабочий Javascript-код для загрузки больших файлов, я обновлю этот ответ.