2016-08-19 2 views
1

Решение: была ошибка в моем контракте развязность, правильное определение FileUpload должно выглядеть следующим образом:Кураж NodeJS Файл Загрузить

parameters: 
    - in: formData 
    name: file 
    description: The file to upload 
    required: true 
    type: file 

Спасибо за подсказку!

Оригинальный вопрос:

У меня есть проблема относительно моего Swagger/NodeJS API.

Я хочу получать файлы и сохранять полученный файл другим облачным сервисом.

К сожалению, файл не поступает в том формате, который я ожидаю. Это то, что я получаю в req.swagger.params.image.value через почтальона:

------WebKitFormBoundaryZCFoUQnf4lHIhzjj 
Content-Disposition: form-data; name="image"; filename="r14kvzvmsh3xnuyl2vq8.png" 
Content-Type: image/png 

�PNG 

IHD�o&�IDA�c���?� � ��1��X��5�юIEND�B`� 
------WebKitFormBoundaryZCFoUQnf4lHIhzjj-- 

Испытанный изображения as a PNG или как base64:

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg== 

Мой cloudprovider для изображений cloudinary , поэтому, когда я использую следующий код, он успешно сохраняется в службе.

cloudinary.v2.uploader.upload("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==") 

Когда я использую

new Buffer(req.swagger.params.image.value, 'binary').toString('base64'); 

Я ожидал, что файл должен быть преобразован в base64, но я думаю, что часть в REQ, ограничивающей Content-Type и т.д. также преобразуется.

Кто-нибудь знает способ работы с файловыми загрузками и чванством, поэтому я могу загрузить изображение в облачный?

Regex кажется очень «Hacky» ...

Это ImageUpload часть в моем контракте развязность:

/imageUpload: 
x-swagger-router-controller: image_upload 
post: 
    description: Endpoint to upload the image file. The image has to be uploaded before the shipment is created, a response will be the image ID that has to be supplied to the shipment. If the image ID is not valid, i.e. not known to this api, the shipment can not be created 
    operationId: storeImage 
    consumes: 
    - multipart/form-data 
    - application/x-www-form-urlencoded 
    - binary 
    parameters: 
    - in: body 
    name: image 
    description: The file to upload 
    required: true 
    schema: 
     type: string 
     format: file 
    responses: 
    "200": 
     description: Success 
     schema: 
     # a pointer to a definition 
     $ref: "#/definitions/ImageResponse" 
    # responses may fall through to errors 
    default: 
     description: Error 
     schema: 
     $ref: "#/definitions/ErrorResponse" 
+0

Привет, спасибо за подсказку, которая сделала это, отредактирует мой вопрос, чтобы показать решение. – DaveTheSane

+0

Awesome. Я тоже напишу это в ответ. – brandonscript

ответ

0

кажется мне, как вы загружаете сырой двоичный файл вместо base64 закодированное изображение. Я бы уничтожил все двоичные файлы, определл только base64 в вашем документе swagger и гарантировал, что кодировка Buffer-> base64 будет работать как ожидалось (выполните некоторые консольные протоколирования).

Смежные вопросы