Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Java 如何通过ApacheHttpClient上传文件?_Java_Apache Httpclient 4.x_Octoprint - Fatal编程技术网

Java 如何通过ApacheHttpClient上传文件?

Java 如何通过ApacheHttpClient上传文件?,java,apache-httpclient-4.x,octoprint,Java,Apache Httpclient 4.x,Octoprint,我想上传一个文件,如下所述: 我使用ApacheHttpClient发送post连接,但每当我启动该方法时,都不会发生任何事情,应用程序会毫无错误地陷入困境,但就是什么也不做 其他POST和GET请求正在工作,我不需要API密钥,因为我关闭了身份验证 CloseableHttpClient posterClient=HttpClients.createDefault(); HttpPost=新的HttpPost(“http://localhost:5002/api/files/local");

我想上传一个文件,如下所述:

我使用ApacheHttpClient发送post连接,但每当我启动该方法时,都不会发生任何事情,应用程序会毫无错误地陷入困境,但就是什么也不做

其他POST和GET请求正在工作,我不需要API密钥,因为我关闭了身份验证

CloseableHttpClient posterClient=HttpClients.createDefault();
HttpPost=新的HttpPost(“http://localhost:5002/api/files/local");
post.setHeader(“主机”http://localhost:5002");
setHeader(“内容类型”,“多部分/表单数据;边界=----WebKitFormBoundaryDeC2E3iWbTv1PwMC”);
post.setHeader(“X-Api-Key”,即“);
HttpEntity=MultipartEntityBuilder
.create()
.addBinaryBody(“文件”,新文件(“/Users/florian/eclipse workspace/docker-Client/src/main/java/test/dog3.gcode”),ContentType.create(“multipart/form-data”),“dog.gcode”)
.addTextBody(“选择”、“真”)
.addTextBody(“打印”、“真实”)
.build();
ByteArrayOutputStream字节=新建ByteArrayOutputStream();
实体写入(字节);
字符串内容=字节。toString();
StringEntity entity2=新的StringEntity(内容、ContentType.APPLICATION\u八位字节\u流);
entity2.setContentEncoding(“应用程序/八位字节流”);
post.setEntity(entity2);
CloseableHttpResponse-answer=posterClient.execute(post);
如果我打印帖子,我将获得(删除gcode说明):


请求行:POSThttp://localhost:5002/api/files/local HTTP/1.1
Header:boundary=--WebKitFormBoundaryDeC2E3iWbTv1PwMC;
内容物:JIDzHYxyG74480VXGugHYTI-7xe5OrZ8
内容配置:表单数据;name=“file”;filename=“dog.gcode”
内容类型:多部分/表单数据
内容传输编码:二进制
M5
G90
G21
G1 F3000
G1 X18.0359 Y51.0881
M3 S90
G4,P0.3
--JIDzHYxyG74480VXGugHYTI-7xe5OrZ8
内容配置:表单数据;name=“选择”
内容类型:文本/纯文本;字符集=ISO-8859-1
内容传输编码:8比特
真的
--JIDzHYxyG74480VXGugHYTI-7xe5OrZ8
内容配置:表单数据;name=“打印”
内容类型:文本/纯文本;字符集=ISO-8859-1
内容传输编码:8比特
真的
--JIDzHYxyG74480VXGugHYTI-7xe5OrZ8--

所以。。。不完全是我想要的…

好的,现在我的代码看起来是这样的,并且可以正常工作。要删除不必要的行(如内容类型编码),必须将ode设置为“浏览器兼容”

CloseableHttpClient-httpClient=HttpClients.createDefault();
HttpEntity=MultipartEntityBuilder.create().setMode(
HttpMultipartMode.BROWSER_COMPATIBLE).setBoundary(----WebKitFormBoundaryDeC2E3iWbTv1PwMC”).setContentType(
ContentType.MULTIPART\u FORM\u DATA)
.addBinaryBody(“文件”,
新文件(“路径”),
ContentType.APPLICATION_八位组_流,“filename.gcode”)
.addTextBody(“选择”、“真”、ContentType.MULTIPART\u表单数据”).addTextBody(“打印”、“真”、ContentType.MULTIPART\u表单数据)
.build();
HttpPost HttpPost=新的HttpPost(“http://localhost:5002/api/files/local");
httpPost.addHeader(“主机”http://localhost:5002");
httpPost.addHeader(“X-Api-Key”、“88CC15F3B5864CCAB19981A8B67A4071”);
addHeader(“内容类型”,“多部分/表单数据;边界=----WebKitFormBoundaryDeC2E3iWbTv1PwMC”);
httpPost.setEntity(实体);
//betterPrint(httpPost);
HttpResponse response=httpClient.execute(httpPost);
HttpEntity结果=response.getEntity();

目标文件夹是否存在?如果是,您是否有权限对其进行写入?是的,该文件夹存在,并且我有写入权限(由于禁用了身份验证,我有管理员权限)。我想我在构建请求的过程中遗漏了一些细节……我正在阅读代码并与文档进行比较,到目前为止我没有发现任何问题。是的,在这种情况下,我会打印请求以检查文档的标题。我看到您的文件路径中有一个docker客户端。你在用docker吗?如果是这样的话,你可以不带容器试试吗?首先在本地尝试避免任何容器配置问题。如果我打印(POST),只需获取“POST HTTP/1.1”。。。