将虚拟文件作为MultipartEntity发送

时间:2013-06-27 23:08:50

标签: java

我想将文件的内容发送为org.apache.http.entity.mime.MultipartEntity。问题是,我没有真正的文件,只有String的内容。以下测试工作正常,其中filejava.io.File指向有效的png文件:

MultipartEntity entity = 
  new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("source", new StringBody("computer"));
entity.addPart("filename", new FileBody(file, "image/png"));
HttpPost httpPost = new HttpPost(URL);
httpPost.setEntity(entity);
HttpClient httpClient = new DefaultHttpClient();

final HttpResponse response = httpClient.execute(httpPost);
System.out.println(EntityUtils.toString(response.getEntity()));

稍后,我不会有真实的文件,只会将其内容设为String。我不太了解编码(更不用说什么),但如果我尝试使用以下列方式创建的临时文件的相同方法

String contents = FileUtils.readFileToString(new File(path),"UTF8");
File tmpFile = File.createTempFile("image", "png");
tmpFile.deleteOnExit();
InputStream in = new ByteArrayInputStream(contents.getBytes("UTF8"));
FileOutputStream out = new FileOutputStream(tmpFile);
org.apache.commons.io.IOUtils.copy(in, out);

path指向完全相同的png文件,该文件在第一个代码块中成功但这次我得到了

  

无法上传图片;格式不受支持

来自服务器的

错误。我怀疑是与编码有关。有人看到我做错了什么显而易见的事吗?

1 个答案:

答案 0 :(得分:6)

不要使用 readFileToString ,而是 readFileToByteArray ,并且不要将内容存储在字符串中,而是存储在byte []中:

byte[] contents = FileUtils.readFileToByteArray(new File(path));
File tmpFile = File.createTempFile("image", "png");
tmpFile.deleteOnExit();
InputStream in = new ByteArrayInputStream(contents);
FileOutputStream out = new FileOutputStream(tmpFile);
org.apache.commons.io.IOUtils.copy(in, out);