Я пытаюсь настроить nginx для управления загрузкой файлов для приложения node.js. Я следовал этому руководству: https://coderwall.com/p/swgfvw/nginx-direct-file-upload-without-passing-them-through-backend

Я сделал это со следующей конфигурацией:

server {
    listen 80;

    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /upload {
        auth_request               /upload/authenticate;
        limit_except POST          { deny all; }

        client_body_temp_path      /tmp/;
        client_body_in_file_only   on;
        client_body_buffer_size    128K;
        client_max_body_size       1000M;

        proxy_pass_request_headers on;
        proxy_set_header           X-FILE $request_body_file;
        proxy_set_body             off;
        proxy_redirect             off;
        proxy_pass                 http://localhost:3000/uploads;
    }

    location /upload/authenticate {
        internal;
        proxy_set_body off;
        proxy_pass http://localhost:3000/auth/isAuthenticated;
    }
}

И я сделал тест с Postman следующим образом:

Загрузить пост-запрос

Почтовый запрос:

POST / загрузка HTTP / 1.1 Хост: localhost Cache-Control: без кеширования

---- WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition: форма-данные; name = "изображение"; filename = "pic.jpg" Тип содержимого: изображение / JPEG

---- WebKitFormBoundaryE19zNvXGzXaLvS5C

Он работает нормально, и nginx загружает изображение в каталог / tmp. Проблема в том, что файл переименован в «0000000001», и когда я переименовываю его вручную как «pic.jpg» и пытаюсь открыть его, программа просмотра запрашивает «Ошибка интерпретации файла изображения JPEG (не файл JPEG: начинается с 0x2d 0x2d)» .

И когда я запускаю команду файла (файл pic.jpg), она возвращает: «pic.jpg: data».

sromdhane

Ответы (1)

Не могли бы вы проверить версию Postman? В моей среде Postman (v3.2.8) имеет "двоичный" переключатель для метода запроса.

Согласно сообщению в блоге, метод clientbodyinfileonly несовместим с составными данными и поддерживает загрузку только двоичных данных.

Поэтому, пожалуйста, повторите запрос в двоичном режиме (Почтальон или другой метод, например XHR2).

2022 WebDevInsider