当前位置: 首页 > 面试题库 >

如何使用Apache httpclient获得自定义的Content-Disposition行?

谢旭
2023-03-14
问题内容

我在这里使用答案来尝试POST通过数据上传进行请求,但是服务器端有不同寻常的要求。该服务器是一个PHP脚本,需要filenameContent- Disposition行,因为它是期待一个文件上传。

Content-Disposition: form-data; name="file"; filename="-"

但是,在客户端,我想发布一个内存中的缓冲区(在这种情况下为String)而不是文件,但是让服务器像对待文件上传一样处理它。

但是,使用StringBodyI无法在行filename上添加必填字段Content- Disposition。因此,我尝试使用FormBodyPart,但这只是将其filename放在单独的行上。

HttpPost httppost = new HttpPost(url);
MultipartEntity entity = new MultipartEntity();
ContentBody body = new StringBody(data,                              
         org.apache.http.entity.ContentType.APPLICATION_OCTET_STREAM);
FormBodyPart fbp = new FormBodyPart("file", body); 
fbp.addField("filename", "-");                     
entity.addPart(fbp);                               
httppost.setEntity(entity);

我如何才能filename进入Content-Disposition一行,而无需先将其写入String文件然后再次将其读出来?


问题答案:

试试这个

StringBody stuff = new StringBody("stuff");
FormBodyPart customBodyPart = new FormBodyPart("file", stuff) {

    @Override
    protected void generateContentDisp(final ContentBody body) {
        StringBuilder buffer = new StringBuilder();
        buffer.append("form-data; name=\"");
        buffer.append(getName());
        buffer.append("\"");
        buffer.append("; filename=\"-\"");
        addField(MIME.CONTENT_DISPOSITION, buffer.toString());
    }

};
MultipartEntity entity = new MultipartEntity();
entity.addPart(customBodyPart);


 类似资料:
  • 在常规 HTTP 响应中,Content-Disposition响应标头是指示内容是否预期在浏览器中内联显示的标题,即,作为网页或作为网页的一部分或作为附件下载并且本地保存。 在一个multipart/form-data正文中,HTTP Content-Disposition通用标题是一个标题,可以在多部分主体的子部分中使用,以提供有关它适用的字段的信息。子部分由标题中定义的边界分隔Content

  • 我下载了一个文件作为ajax的响应。如何从中获取文件名和文件类型并显示缩略图。我得到了很多搜索结果,但找不到正确的方法。 控制台输出:

  • 我有一个使用spring-security-jwt和spring-security-oauth2的Spring Boot应用程序。我有一个扩展UserDetails的自定义User对象和一个从loadUserByUsername方法返回此对象的自定义UserDetailsService。 但是,当我使用身份验证对象的getPrincipal方法并试图强制转换到我的自定义用户对象时,它失败了,因为主

  • 问题 如何使用自定义中间件在调用下一个上下文时获取响应正文? 到达await _next行后。从调试中调用(上下文); 不从操作结果返回 JSON 数据 获取用户菜单 我需要从上面的操作结果中得到响应体。 我的代码我试试: https://i.stack.imgur.com/PHUMs.png 当有效令牌时,它会在浏览器谷歌上返回如下数据 但在我的应用程序浏览器上返回无效令牌

  • 问题内容: 我的类DataType有一个JsonConverter。当在Json中使用纯字符串作为DataType类型的属性的值时,我想做一些特殊的处理。在值是“完整”对象的情况下,我想进行“常规”反序列化。 这是我的尝试 但这不起作用,因为这行:DataType dataType = serializer.Deserialize(reader); 导致无限递归。 可以通过某种方式轻松完成吗?(无

  • 显然,可以创建一个TypeDef来根据方言切换实现。 我的问题是hibernate似乎没有识别它,值得注意的是,有一次我将“uuid-custom”作为类型中的静态字符串,并直接在中引用它,所以它并不是实际上不在类路径上。