2016-08-03 35 views
1

我正在更新图像和一些文本到服务器使用凌空,但图像没有上载。我搜索了它,发现图像需要使用多部分发送,而排除不支持多部分。有什么方法可以使用凌空来上传图片和文字?上传图像和其他参数到服务器

// 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);

+0

也许[这](http://stackoverflow.com/questions/29430599/upload-an- image-using-google-volley)会帮助你解决你的问题。 – ahdgfd

+0

如何在这里添加其他参数? – CodeAssasins

回答

2

试试这个方法:

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); 
 
      } 
 

 
     } 
 
    }