我正在使用答案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);

10-08 01:33