上传图像和其他参数到服务器
问题描述:
我正在更新图像和一些文本到服务器使用凌空,但图像没有上载。我搜索了它,发现图像需要使用多部分发送,而排除不支持多部分。有什么方法可以使用凌空来上传图片和文字?上传图像和其他参数到服务器
// Volley request
StringRequest stringRequest = new StringRequest(Request.Method.POST, URLUtils.URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jObj = new JSONObject(response);
if((jObj.getString("Ack").equals("1"))){
Toast.makeText(getApplicationContext(), jObj.getString("msg"), Toast.LENGTH_SHORT).show();
System.out.println(jObj.getString("image"));
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("auth", "abc167");
params.put("action", "editprofile");
params.put("first_name", fname_et.getText().toString());
params.put("last_name", lname_et.getText().toString());
params.put("address", address_str);
params.put("zipcode", zip_et.getText().toString());
params.put("phoneno", phone_et.getText().toString());
params.put("device_token_id", "1234567890");
params.put("device_type", "android");
params.put("lat", lat_str);
params.put("long", lng_str);
params.put("photo", imagepath);
params.put("userid", "121");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(stringRequest);
答
试试这个方法:
class ImageUploadTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
String url = URLUtils.URL;
HttpClient httpClient = new DefaultHttpClient();
//HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
MultipartEntity entity = new MultipartEntity();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
entity.addPart("auth", new StringBody("abc167"));
entity.addPart("action", new StringBody("editprofile"));
entity.addPart("first_name", new StringBody(fname));
entity.addPart("last_name", new StringBody(lname));
entity.addPart("address", new StringBody(address_str));
entity.addPart("zipcode", new StringBody(zip));
entity.addPart("phoneno", new StringBody(phone));
entity.addPart("device_token_id", new StringBody("1234567890"));
entity.addPart("device_type", new StringBody("android"));
entity.addPart("lat", new StringBody(lat_str));
entity.addPart("long", new StringBody(lng_str));
entity.addPart("userid", new StringBody("121"));
entity.addPart("photo", new ByteArrayBody(data, "myimage.jpg"));
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse;
s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
System.out.println("Response: " + s);
} catch (Exception e) {
Log.e(e.getClass().getName(), e.getMessage(), e);
}
return s.toString();
}
@Override
protected void onPostExecute(String sResponse) {
try {
if (sResponse != null) {
Toast.makeText(getApplicationContext(),
sResponse + " Photo uploaded successfully",
Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(), e.getMessage(), e);
}
}
}
也许[这](http://stackoverflow.com/questions/29430599/upload-an- image-using-google-volley)会帮助你解决你的问题。 – ahdgfd
如何在这里添加其他参数? – CodeAssasins