远程调用上传文件服务时报错:multipart/form-data not set for request body of type StandardMultipartFile

问题描述:现有两个微服务应用,服务A和服务B,,服务A用于接收前端文件上传请求,服务B用于实现文件的上传,当使用前端调用服务A调用远程服务B时出现如下错误:
在这里插入图片描述
报错:feign.codec.EncodeException: Content-Type “multipart/form-data” not set for request body of type StandardMultipartFile
解决:在需要调用远程文件服务的服务A的接口@PostMapping注解中添加consumes = "multipart/form-data"
在这里插入图片描述

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是使用Mongoose服务器接收form-data图像数据,并解析图像数据,并使用OpenCV显示图像的示例代码: ```c++ #include <iostream> #include <fstream> #include <string> #include <cstring> #include <opencv2/opencv.hpp> #include "mongoose.h" #include "multipart_parser.h" static const char* s_http_port = "8000"; static struct mg_serve_http_opts s_http_server_opts; static std::string s_image_data; class MyParser : public multipart_parser { public: MyParser() : multipart_parser(), is_file_(false) {} void on_part_data(const char* data, size_t size) override { if (is_file_) { out_file_.write(data, size); } else { part_data_.append(data, size); } } void on_part_begin(const char* header, size_t header_size) override { part_data_.clear(); is_file_ = false; std::string header_str(header, header_size); if (header_str.find("filename=") != std::string::npos) { is_file_ = true; std::string filename = get_filename(header_str); out_file_.open(filename, std::ios::binary); } } void on_part_end() override { if (is_file_) { out_file_.close(); } else { s_image_data = part_data_; } } private: bool is_file_; std::string part_data_; std::ofstream out_file_; std::string get_filename(const std::string& header_str) { size_t pos = header_str.find("filename=") + strlen("filename="); std::string filename = header_str.substr(pos); if (filename.front() == '"' && filename.back() == '"') { filename = filename.substr(1, filename.size() - 2); } return filename; } }; static void handle_form_data(struct mg_connection* c, struct http_message* hm) { MyParser parser; parser.set_boundary("boundary"); parser.parse(hm->body.p, hm->body.len); mg_send_http_ok(c, "image/jpeg", s_image_data.size()); mg_send(c, s_image_data.c_str(), s_image_data.size(), MG_SEND_HTTP_BODY); } static void ev_handler(struct mg_connection* c, int ev, void* p) { if (ev == MG_EV_HTTP_REQUEST) { struct http_message* hm = (struct http_message*)p; if (mg_vcmp(&hm->method, "POST") == 0 && mg_vcmp(&hm->uri, "/upload") == 0) { handle_form_data(c, hm); } else { mg_serve_http(c, hm, s_http_server_opts); } } } int main() { struct mg_mgr mgr; struct mg_connection* nc; mg_mgr_init(&mgr, NULL); nc = mg_bind(&mgr, s_http_port, ev_handler); if (!nc) { std::cout << "Failed to create listener" << std::endl; return 1; } mg_set_protocol_http_websocket(nc); s_http_server_opts.document_root = "."; s_http_server_opts.enable_directory_listing = "no"; while (true) { mg_mgr_poll(&mgr, 1000); } mg_mgr_free(&mgr); return 0; } ``` 其中,`MyParser`类用于解析form-data数据,`on_part_begin`、`on_part_data`和`on_part_end`函数分别用于处理form-data的每个部分的开始、数据和结束,通过`is_file_`来判断当前部分是文件还是普通数据,`get_filename`函数用于从头部信息中解析出文件名。在`handle_form_data`函数中,调用`MyParser`类解析图像数据,将解析出来的数据保存到`s_image_data`中,然后使用`mg_send_http_ok`函数设置HTTP响应头,使用`mg_send`函数发送图像数据。在`ev_handler`函数中,判断请求方法和URI是否为upload,如果是,则调用`handle_form_data`函数处理请求,否则调用`mg_serve_http`函数处理静态文件请求。最后,使用Mongoose服务器监听端口并等待请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值