Отправка большого изображения с использованием base64 на сервер nginx + uwsig + django - PullRequest
0 голосов
/ 10 января 2019

Я использую base64 для загрузки изображения на сервер Django. Когда размер изображения превышает 2М, сервер не может получить изображение.

Я настроил конфигурацию uwsgi и nginx и сделал размер загрузки 75M, но он не работал.

Клиент:

image1 = base64.b64encode(open(file_path, 'rb').read())
r = requests.post(url, data={"image": image1})

Сервер:

result = request.POST.get("image")
Nginx:

```bash
server {
# the port your site will be served on
listen     ****;
# the domain name it will serve for
#server_name .example.com; # substitute your machine's IP address or FQDN
server_name ****;
charset utf-8;

# max upload size
client_max_body_size 75M;
}
```
uwsgi:

```bash
# ocr.ini file
# Django-related settings
# the base directory (full path)
chdir= /root/ubuntu
# Django's wsgi file
module= mysite.wsgi
# the virtualenv (full path)
home= /root/ubuntu
# process-related settings
# master
master= true
# maximum number of worker processes
processes= 32
max-requests= 10000
daemonize= /tmp/a.log
pidfile= /tmp/a.pid
#reload-on-as = 126
#reload-on-rss = 126
#enable-threads= true
# the socket (use the full path to be safe
socket= /root/ubuntu/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket= 666
# clear environment on exit
vacuum= true
limit-post= 20000000

harakiri=30
post-buffering=20000000
py-autoreload = 1
```

ошибка: [1]: https://i.stack.imgur.com/HXDVY.png

1 Ответ

0 голосов
/ 10 января 2019

Возможно, вы достигли жесткого лимита, установленного где-то в библиотеке сервера. Если вы пытаетесь загрузить такой большой файл, то использование POST с передачей всего в параметре data - плохая идея (и очень медленная).

Вы должны использовать ключевое слово files для отправки с requests и свойство FILES для получения с Django.

Клиент:

r = requests.post(files={'image': open(file_path,'rb')})

Сервер:

img = request.FILES.get("xxx") # <-- file name here

with open('path/to/destination', 'wb') as dest:
    for chunk in img.chunks():
        dest.write(chunk)

Посетите страницу Загрузка файлов в документации Django.

...