Как добавить тело в многочастную загрузку файла в ruby - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу загрузить изображение с дополнительной информацией на сервер с помощью POST, используя multipart. Мне удалось загрузить файл с помощью бессонницы, но я просто не могу понять, как сделать это правильно в ruby.

Вот мой скриншот для insomia (в моем заголовке у меня для Content-Type установлено значение multipart / form-data, а для моего Авторизации установлен правильный токен на предъявителя https://photos.app.goo.gl/i6UeePgW22cKmBUU7

Это мой рубинкод, с которым я борюсь ...

def self.upload_picture tempfile, picture_params, bearer_token
        begin
            uri = URI("#{ENV['API_HOST']}/pictures/addLocalPicture")                       
            req = Net::HTTP::Post.new(uri, {'Content-Type' =>'multipart/form-data', 'Authorization' => "Bearer #{bearer_token}"})                                    
            form_data = nil

            File.open(tempfile.path) do |file|
                body = {
                    stock_id: "1122",
                    project_id: "112233",
                    company_id: "11223344",
                    filename: "test.png",
                    size: 1
                }
                form_data = {'photoUploadS3' => file}
                req.set_form form_data, 'multipart/form-data'
                req.body = URI.encode_www_form(body)
                res = Net::HTTP.start(uri.hostname, uri.port) do |http|
                    res = http.request(req)
                    say res.body
                    response =  eval(encode_utf8(res.body))         
                    return response.to_struct
                end
            end
       rescue => e
            say "failed #{e}"
            return []
       end            
end  

Это API

    libUploadNode.uploadNode(req, res, function (err) {
        if (err != undefined) {
            res.json({code:80, msgError:err});
            return ;
        }
        if (req.file === undefined || req.file == null)
            res.json({code:81, msgError:"nofile upload failed"});
        else {
            const unique_filename = uuidV1() + "-" + req.body.filename;
            var pictureData = libValidator.makeSafeData(req, res,  [
                {name: "stock_id", type: "objectid", isNeeded: true},
                {name: "project_id", type: "objectid", isNeeded: true},
                {name: "company_id", type: "objectid", isNeeded: true},
                {name: "filename", type: "string", isNeeded: true},
                {name: "size", type: "number", isNeeded: true},
                {name: "owner", type: "string", isNeeded: false},
                {name: "license", type: "string", isNeeded: false},
                {name: "dimension", type: "string", isNeeded: false}
            ]);
...

Я получаю ошибку => {\ "code \": 80, \ "msgError\ ": {}}

Есть ли у вас какие-либо идеи о том, как внедрить содержимое тела в составную часть?

...