我想使用多部分实体发送图像数组喜欢想要发送多个图像。签名的参数如下
entity.addPart("files[]", .....);
我该怎么做?
mime库(最好是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());
}
}
}
要使用此类,请创建 File Uploader 类的对象,然后调用其 addFile() 函数并调用 execute(),因为此类扩展了 AsyncTask。在您的代码中,您已经将 File 对象作为
File file = new File(Environment.getExternalStorageDirectory(),
"tmp_avatar_" + String.valueOf(System.currentTimeMillis())
+ ".jpg");
只需将此对象传递给 addFile()。addFile() 的键将是 "files[]" 这是您需要的。请注意,您可能无法一次性发送文件数组,因为密钥文件[]将被下一个文件覆盖,因此只会上传最后一个图像,因此最好使用相同的键"files[]"多次发送请求,具体取决于您必须发送的文件数量
希望这对你有帮助