4

我想将文件的内容作为org.apache.http.entity.mime.MultipartEntity. 问题是,我并没有真正的文件,而只有String. 以下测试完美运行,指向有效 png 文件的file位置在哪里:java.io.File

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 文件,但这次我得到一个

图片上传失败;不支持格式

来自服务器的错误。我怀疑这与编码有关。有人看到我做错了什么明显的事情吗?

4

1 回答 1

6

不要使用readFileToString,而是readFileToByteArray,不要将内容存储在 String 中,而是存储在 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);
于 2013-06-27T23:17:23.607 回答