Volleyを使って画像をサーバーにアップロードする方法
色々なサイトを見て、ソースコードを試してみましたがVolleyを使って画像をサーバーにアップロードできるものが見つかりませんした。
public class MultipartRequest2 extends Request<String> {
public static final String KEY_PICTURE = "mypicture";
public static final String KEY_PICTURE_NAME = "filename";
public static final String KEY_ROUTE_ID = "route_id";
private HttpEntity mHttpEntity;
private String mRouteId;
private Response.Listener mListener;
public MultipartRequest2(String url, String filePath, String routeId,
Response.Listener<String> listener,
Response.ErrorListener errorListener) {
super(Method.POST, url, errorListener);
mRouteId = routeId;
mListener = listener;
mHttpEntity = buildMultipartEntity(filePath);
}
public MultipartRequest2(String url, File file, String routeId,
Response.Listener<String> listener,
Response.ErrorListener errorListener) {
super(Method.POST, url, errorListener);
mRouteId = routeId;
mListener = listener;
mHttpEntity = buildMultipartEntity(file);
}
private HttpEntity buildMultipartEntity(String filePath) {
File file = new File(filePath);
return buildMultipartEntity(file);
}
private HttpEntity buildMultipartEntity(File file) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
String fileName = file.getName();
FileBody fileBody = new FileBody(file);
builder.addPart(KEY_PICTURE, fileBody);
builder.addTextBody(KEY_PICTURE_NAME, fileName);
builder.addTextBody(KEY_ROUTE_ID, mRouteId);
return builder.build();
}
@Override
public String getBodyContentType() {
return mHttpEntity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
mHttpEntity.writeTo(bos);
} catch (IOException e) {
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response) {
mListener.onResponse(response);
}
}
ネットで見つけたこのソースコードで画像をPOST送信でサーバーにアップロードしたいのですが、
routeIdとはなんでしょうか?
サンプルでは
HashMap<String, String> params = new HashMap<>();
String url = "http://someone.jp/upload.php";
String image_path = "/storage/sdcard/DCIM/Camera/IMG_20161026_182039.jpg";
params.put("user", "username");
MultipartRequest2 multipartRequest =
new MultipartRequest2(url, image_path, params, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("TAG", "Success Response: " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error.networkResponse != null) {
Log.e("TAG", "Error Response code: " +
error.networkResponse.statusCode);
try {
dcimPath.setText("ギャラリーのPath: "+"user");
}finally {
}
}
if (error instanceof NetworkError) {
} else if (error instanceof ServerError) {
} else if (error instanceof AuthFailureError) {
} else if (error instanceof ParseError) {
} else if (error instanceof NoConnectionError) {
} else if (error instanceof TimeoutError) {
}
}
});
mQueue.add(multipartRequest);
となっていましたが、これだとエラーが出てオブジェクトが生成できませんでした。
どなたか教えてください。