Errno 2 Нет такого файла или каталога: '/tmp/tmp3v35kv5z.upload.pdf' - PullRequest
0 голосов
/ 07 мая 2019

В моем проекте мне нужно загрузить много файлов, размер которых может достигать 50-60 МБ. Я использую поле файла Django для загрузки файлов. Но когда размер файла превышает 2,5 МБ, это дает мне эту ошибку [Errno 2] Нет такого файла или каталога: '/tmp/tmp3v35kv5z.upload.pdf'

Я пробовал файлы разных размеров. Файлы <2MB работают просто отлично </p>

Settings.py выглядит так:

STATIC_URL = '/static/'
MEDIA_URL = '/uploads/'
MEDIA_ROOT = os.path.join(BASE_DIR, "uploads")
CONTENT_TYPES = ['image', 'document']
# 2.5MB - 2621440
# 5MB - 5242880
# 10MB - 10485760
# 20MB - 20971520
# 50MB - 5242880
# 100MB 104857600
# 250MB - 214958080
# 500MB - 429916160
MAX_UPLOAD_SIZE = "104857600"

view.py выглядит так:

if request.method == 'POST' and request.FILES['fileToUpload']:
    myfile = request.FILES['fileToUpload']
    fs = FileSystemStorage()
    filename = fs.save(myfile.name, myfile)
    path = fs.url(filename)

    student_roll_no = request.POST.get('roll_no')
    document_type = request.POST.get('doctype')
    department = request.POST.get('department')
    title = request.POST.get('title')
    subject = request.POST.get('subject')
    date_of_submission = datetime.datetime.now().date()
    document_code = student_roll_no+'_'+document_type
    ...

    Document.objects.create(code = document_code, document = request.FILES['fileToUpload'], path = path, date_of_submission = date_of_submission, type = document_type, title = title, department = department, subject = subject, updation_allowed = '0')  

Ожидаемый результат: Загрузка файла прошла успешно! Текущий результат: [Errno 2] Нет такого файла или каталога: '/tmp/tmp3v35kv5z.upload.pdf'

Редактировать 1: Файл загружается в папку загрузки, но при создании записи в базе данных он выдает исключение с указанной выше ошибкой.

Редактировать 2: Нашел решение. Просто нужно добавить следующую строку в файл settings.py FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880

1 Ответ

0 голосов
/ 07 мая 2019

2,5 МБ - это ограничение памяти по умолчанию для Django, так как оно находится в памяти.

Предел загрузки

"... На Unix-подобной платформе это означает, что вы можете ожидать, что Django создать файл с именем что-то вроде /tmp/tmpzfp6I6.upload. Если загрузка достаточно велика, вы можете наблюдать, как этот файл увеличивается в размере как Django передает данные на диск. "

Запуск для мониторинга размера файла, watch -n 1 ls -alh '/tmp/tmp3v35kv5z.upload.pdf'

Вы также можете использовать собственный FileHandler для управления лимитом файлов в соответствии с вашими потребностями.

FileHandler

...