1

我正在尝试将存储在 Android 手机上的一些二进制数据作为文件发送到用 PHP 创建的 Web 服务。

我已经尝试过使用MultiPartValuePair但没有运气..!

我还用 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 服务的二进制数据?

4

1 回答 1

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更简洁。

于 2013-03-14T08:30:43.803 回答