Как разрешить загрузку больших файлов на 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-код для загрузки больших файлов, я обновлю этот ответ.