我想使用多部分实体发送图像数组 喜欢发送多个图像。 签名的参数如下:
entity.addPart("files[]", .....);
我该怎么做?
答案 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 []”取决于您必须发送的文件数量
希望这会对你有所帮助