我正在使用答案here尝试通过数据上传提出POST
请求,但是我在服务器端有不同寻常的要求。该服务器是一个PHP脚本,需要在filename
行上输入Content-Disposition
,因为它希望上传文件。
Content-Disposition: form-data; name="file"; filename="-"
但是,在客户端,我想发布一个内存中的缓冲区(在这种情况下为String)而不是文件,但是让服务器像对待文件上传一样处理它。
但是,使用
StringBody
我无法在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);