2013-06-27 31 views
4

我想发送一个文件的内容为org.apache.http.entity.mime.MultipartEntity。问题是,我没有真正的文件,但只有内容为String。下面的测试工作完全,其中filejava.io.File指向有效的PNG文件:发送虚拟文件为MultipartEntity

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文件的临时文件相同的做法,成功在第一个代码块但这次我得到一个

无法上传图像;格式不支持

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

+0

似乎 “内容” 是一个二进制文件,不是可以转换为字符串的东西 – morgano

回答

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); 
+0

谢谢。我不会想出自己使用'String',但是在这种情况下* Mathematica *和Java之间的接口有点不清楚。虽然我*可以*在* Mathematica *中用'String'表示甚至是二进制的东西,但是当我将它发送给Java时,它会被搞砸。无论如何,将其转换为数字列表(字节)非常好。 – halirutan