我正在尝试将存储在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));
,函数readFileAsString()
为:
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上执行此操作时,它不会维护二进制值。我认为是因为Android中的默认编码是UTF-8。
你能帮忙吗?如何获取从Android发送到PHP服务的二进制数据?答案 0 :(得分:0)
您可以使用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
更简洁。