I am trying to send post parameter as user name and image as multiform data using volley in android. I am creating body as well as sending parameters but it seems that body of post service is somehow overwriting the parameter as its given from the server. I am using customized request class and code written in it is as follow:
public abstract class CustomJsonRequest<T> extends Request<T> {
................
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// return super.getParams();
HashMap<String, String> map = new HashMap<>();
map.put("userName", requestParameters.get("userName"));
return map;
}
public byte[] getBody() throws AuthFailureError {
return createPostBody(requestParameters).getBytes();
}
private String createPostBody(Map<String, String> params) {
StringBuilder sbPost = new StringBuilder();
if (params != null) {
// for (String key : params.keySet()) {
if (params.get("image") != null) {
sbPost.append("\r\n" + "--" + BOUNDARY + "\r\n");
sbPost.append("Content-Disposition: form-data; name=\"" + "image" + "\"" + "\r\n\r\n");
sbPost.append(params.get("image"));
}
//}
}
return sbPost.toString();
}
}
On debugging I could see getParameters no being called. My aim is to send post parameter with image as its post body using volley in android. In Ios its using alamofire and its succesfully uploaded by following code.
func uploadImage(userImage: UIImage, completion: (result: RestResultType) -> Void) {
let parameters = ["userName": localData.getAccessToken()]
let url = domain + RestExt.imageUpload.rawValue
Alamofire.upload(.POST, url, multipartFormData: {
multipartFormData in
let imageData = UIImageJPEGRepresentation(userImage, 0.5)
if(imageData == nil) {
completion(result: .Error(e: method(code: "ImageConversionError",message: "")))
return
}
multipartFormData.appendBodyPart(data: imageData!, name: "image", fileName: "image.png", mimeType: "image/png")
for (key, value) in parameters {
multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
}
}, encodingCompletion: {
encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON {
response in
switch response.result {
case .Success(let JSONResponse) :
let response = JSONResponse as! NSDictionary
let error = response.objectForKey("error") as? NSDictionary
if(error != nil) {
completion(result: .Error(e: method(JSONDictionary: error!)))
}
else {
completion(result: .Success(r: response))
}
case .Failure(let err):
}
}
case .Failure(let encodingError):
print(encodingError)
}
})
}