Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C+通过HTTP协议上传文件+;? 我将用C++上传文件,到java Spring启动Web服务器。_C++_Spring Boot_Http_Http Protocols - Fatal编程技术网

如何使用C+通过HTTP协议上传文件+;? 我将用C++上传文件,到java Spring启动Web服务器。

如何使用C+通过HTTP协议上传文件+;? 我将用C++上传文件,到java Spring启动Web服务器。,c++,spring-boot,http,http-protocols,C++,Spring Boot,Http,Http Protocols,我构建的协议如下所示(纯文本): 服务器端为Java spring boot server,接口定义如下: @PostMapping("uploadvideo") public ResultVo uploadVideo(@RequestParam("file") MultipartFile file); 在发布文件时,服务器以代码400响应,并抱怨 所需的请求部分“文件”不存在 但是,使用简单的HTML页面,文件上载成功,HTML页面如下所示: <

我构建的协议如下所示(纯文本):

服务器端为Java spring boot server,接口定义如下:

@PostMapping("uploadvideo")
public ResultVo uploadVideo(@RequestParam("file") MultipartFile file);
在发布文件时,服务器以代码400响应,并抱怨

所需的请求部分“文件”不存在

但是,使用简单的HTML页面,文件上载成功,HTML页面如下所示:

<html>
    <head></head>
    <body>
        <form id="form" enctype="multipart/form-data" method="post" 
            action="http://192.168.0.133:8981/gallery/multimedia/uploadvideo">
            <input id="file" name="file" type="file" />
            <input id="submit" value="submit" type="submit" />
        </form>
    </body>
</html>

我应该如何构造文件部分?有什么想法吗?

首先,感谢@strupo的建议

通过打开
curl
--trace
选项并查看输出日志文件,我终于解决了这个问题

curl
中,它通过几个数据包发布文件:

标题:

POST /gallery/multimedia/uploadvideo HTTP/1.1
User-Agent: curl/7.29.0
Host: 192.168.0.133:8981
Accept: */*
Content-Length: 13602  # you have to calculate content length first
Expect: 100-continue   # very important line
Content-Type: multipart/form-data; boundary=------3c653d03b97f
然后等待服务器响应:

HTTP/1.1 100
在服务器响应代码100后,它发送数据内容,表单数据头首先:

--------3c653d03b97f
Content-Type: video/mp4
Content-Disposition: form-data; name="file"; filename="1.mp4"
Content-Length: 6640
Content-Transfer-Encoding: 8bit
接下来是文件内容(在我的例子中,分配了一个大内存,一次从文件读取并写入套接字),然后是下一个文件

最后,协议应以边界线完成:

--------3c653d03b97f--

内容长度
应包括在标头之后发送的所有字节。在文件部分中,
边界
应以
--
作为前缀。同样,<>代码> \r\n>代码>到处都应该注意。

是你最好的朋友,检查这个问题,看看如何找到浏览器发送给服务器的问题:你的问题/代码片段中的实际C++部分在哪里?我错过了一些基本的东西吗?看看浏览器和C++程序所发送的请求,看看有什么不同。你可以用卷轴用<代码> -Trace-<代码>来准确地查看它发送的内容,并将它与你的程序发送的内容进行比较。
--------3c653d03b97f
Content-Type: video/mp4
Content-Disposition: form-data; name="file"; filename="1.mp4"
Content-Length: 6640
Content-Transfer-Encoding: 8bit
--------3c653d03b97f--