在android中使用Multi Part Entity发送图像数组

时间:2016-01-23 13:35:04

标签: android android-volley multipartentity

我想使用多部分实体发送图像数组 喜欢发送多个图像。 签名的参数如下:

entity.addPart("files[]", .....);

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用HTTP mime库(Preferable 4.3.3)和HTTP post将文件上传到服务器。 PHP服务器会将图像识别为FILE,这在您的案例中是必需的。 我创建了一个类,可以帮助我将图像或任何文件上传到我的服务器

public class FileUploadHelper extends AsyncTask<Void, Void, Void> {

    private MultipartEntityBuilder multipartEntity;
    private String URL;

    public FileUploadHelper(String URL) {
        multipartEntity = MultipartEntityBuilder.create();
        this.URL = URL;
    }

    @SuppressLint("TrulyRandom")
    @Override
    protected Void doInBackground(Void... arg0) {
        try {
            multipartEntity.addTextBody("<YOUR STRING KEY>", "<STRING VALUE>");

            multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            HttpClient httpclient;
            httpclient = new DefaultHttpClient();

            httpclient.getConnectionManager().closeExpiredConnections();
            HttpPost httppost = new HttpPost(URL);
            httppost.setEntity(multipartEntity.build());

            HttpResponse response = httpclient.execute(httppost);
            int responseCode = response.getStatusLine().getStatusCode();

            String serverResponse = EntityUtils.toString(response.getEntity());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void addFile(String key, File newFile) throws FileNotFoundException {
        if (newFile.exists()) {
            multipartEntity.addBinaryBody(key, newFile);
        } else {
            throw new FileNotFoundException("No file was found at the path " + newFile.getPath());
        }
    }
}

要使用此类创建FileUploader类的Object,然后调用其addFile()函数并调用execute(),因为此类扩展了AsyncTask。在您的代码中,您已将File对象设为

File file = new File(Environment.getExternalStorageDirectory(),
                    "tmp_avatar_" + String.valueOf(System.currentTimeMillis())
                            + ".jpg");

只需将此对象传递给addFile()即可。 addFile()的关键是你需要的“files []”。 请注意,您可能无法一次性发送文件数组,因为密钥文件[]将被下一个文件覆盖,因此只有最后一个图像将被上传,因此最好使用相同的密钥多次发送请求“files []”取决于您必须发送的文件数量

希望这会对你有所帮助