我正试图将一些存储在Android手机上的二进制数据作为文件发送到用PHP创建的web服务。
我试过使用MultiPart
和ValuePair
,但没有成功。。!!
我还用Java创建了一个控制台应用程序,它从Windows上的静态位置读取二进制文件,并使用相同的PHP服务,使用MultiPart
可以很好地工作,下面是它的代码:
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file,"text/plain");
mpEntity.addPart("qLog", new StringBody(readFileAsString(file.getAbsolutePath()),
Charset.defaultcharset)));
mpEntity.addPart("fileName", new StringBody(fileName));
mpEntity.addPart("personid", new StringBody(userid));
函数CCD_ 4为:
private String readFileAsString(String filePath) throws IOException {
StringBuffer fileData = new StringBuffer();
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[1024];
int numRead=0;
while ((numRead=reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
}
reader.close();
return fileData.toString();
}
但当我在安卓系统上这样做时,它并没有维护二进制值。我认为原因是Android中的默认编码是UTF-8。
你能在这里帮忙吗?如何将二进制数据从Android发送到PHP服务?
您可以使用InputStreamBody
而不是StringBody
:
MultipartEntity mpEntity = new MultipartEntity();
mpEntity.addPart("qLog", new InputStreamBody(new FileInputStream(file),
file.getName());
mpEntity.addPart("fileName", new StringBody(fileName));
mpEntity.addPart("personid", new StringBody(userid));
已编辑
或者您可以使用FileBody
来更简洁。