当前位置: 首页 > 知识库问答 >
问题:

使用postman上载文件可以正常工作,但使用Apache HttpClient时失败

陈志
2023-03-14

我正在测试系统上使用外部REST API。我正在尝试实现一个上载路径,我正在使用Apache HTTPClient。我尝试了以下邮差配置,效果非常好:

上传工作正常。

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPut request = new HttpPut("../upload") // placeholder url, not the real one
    
request.setHeader("Content-type", "multipart/form-data");   
request.setHeader(HttpHeaders.AUTHORIZATION, "HEY I AM A TOKEN");       
    
FileBody fileBody = new FileBody(new File("dummy.pdf"), ContentType.create("application/pdf"));
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("file", fileBody);
request.setEntity(builder.build());
    
CloseableHttpResponse response = httpClient.execute(request);

我总是从rest api中得到一个特定错误:

File could not have been parsed

上载路径的文档中提到了以下详细信息:

  • 标题内容类型多部分/表单数据

我想我在我的请求中完成了这个列表中的每一点——那么邮递员请求和我自己的java http请求之间的区别是什么呢?

我错过了什么?

编辑:

OkHTTP的代码也是一样的。仍然不知道为什么它不能与Apache HttpClient一起工作。

OkHttpClient testClient = new OkHttpClient();
File testfile = new File("dummy.pdf");

RequestBody body = new MultipartBuilder().type(MultipartBuilder.FORM).addFormDataPart("file","dummy.pdf",
RequestBody.create(MediaType.parse("application/pdf"),testfile)).build();

Request testreq = new Request.Builder()
.url("../upload")
.header("Authorization", "HI I AM A TOKEN")
.put(body)
.build();
Response testres = testClient.newCall(testreq).execute();

共有1个答案

公孙和怡
2023-03-14

我不得不删除这条线

request.setHeader("Content-type", "multipart/form-data");   

让它发挥作用。我真的不知道为什么,如果有人能帮我解决这个问题,并给我一些解释,我愿意接受。目前我很高兴,因为它现在起作用了。

 类似资料:
  • 我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。

  • 我正在编写一个Rest客户端来发布JSON数据使用Spring RestTem板。使用POSTMAN和下面的JSON数据在体内得到正确的响应- 但是,当尝试使用SpringRESTTemplate访问RESTAPI时,如下所示 我有个例外- 我会感谢你的帮助。

  • 我正在尝试使用邮差上传一个文件。我已经通过点击“body”(在postman中)->二进制->选择文件附加了文件。我使用S3上载预签名的URL。在url中,文件的名称与我在Postman中选择的文件的名称完全相同。运行请求时,我得到一个错误: 但是,通过导出postman请求(通过单击“Code”)来获得curl命令,我得到了: 并添加一个用于上载文件的附加选项:

  • 我正在测试文件上传到SharePoint在线与邮递员。在我的帖子请求中,我将正文设置为form-data,并添加了一个名为a.txt.的文本文件的文件参数 当我执行请求时,我的文件被上传,但当我打开文件时,内容被删除 我已尝试将内容类型标题设置为 应用程序/x-wow-form-urlencoded或多部分/form-data 但是没有运气

  • 我有两台Linux服务器通过交叉连接电缆连接,内部IP地址为192.168.0.1(hostA)和192.168.0.2(hostB)。 hostA运行CentOS 5,hostB运行CentOS 7。 host B运行Apache 2.4. x和Tomcat 8.5.9。所有的网络流量都被路由到端口443(例如。HTTPS)的Apache Web服务器主机B。然后,所有Web应用程序流量(例如h

  • 与/user/login?_format=json完全相同的POST在Postman中不起作用(错误403禁止),但在curl中使用相同的参数可以正常工作。 这个Curl的工作原理是:Curl--header“content-type:application/json”--request POST--data“{”name“:”bobo“,”pass“:”xxx“}”http://[domain]