2015-05-29 37 views
2

我想从我的android应用程序上传文件(图像,文档等)到我的服务器。我在我的应用程序中使用Volley库进行网络调用。如何在Android中使用Volley执行文件上传?

我用下面的代码上传文件,但它不执行任何操作。(显示最后凌空超时错误)

public class MultipartRequest extends Request<String> { 

    private MultipartEntity entity = new MultipartEntity(); 

    private static final String FILE_PART_NAME = "file"; 


    private final Response.Listener<String> mListener; 
    private final File mFilePart; 
    private String mStringPart,accessToken; 

    public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file,String accessToken) 
    { 
     super(Method.POST, url, errorListener); 

     mListener = listener; 
     mFilePart = file; 
     this.accessToken = accessToken; 
     buildMultipartEntity(); 
    } 

    private void buildMultipartEntity() 
    { 
     entity.addPart(FILE_PART_NAME, new FileBody(mFilePart)); 
     try 
     { 
      entity.addPart("Content-Disposition", new StringBody("form-data")); 
      entity.addPart("dir_path", new StringBody("IzEzOjE3")); 
     } 
     catch (UnsupportedEncodingException e) 
     { 
      VolleyLog.e("UnsupportedEncodingException"); 
     } 
    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> headers = super.getHeaders(); 

     if (headers == null 
       || headers.equals(Collections.emptyMap())) { 
      headers = new HashMap<String, String>(); 
     } 

     headers.put("Content-Type", "multipart/form-data"); 
     headers.put("_pkta",accessToken); 


     return headers; 
    } 
    @Override 
    public String getBodyContentType() 
    { 
     return entity.getContentType().getValue(); 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError 
    { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     try 
     { 
      entity.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); 
    } 
} 

请帮我就如何落实在Android的文件上传(通过凌空或任何其他)

+0

尝试此链接http://stackoverflow.com/questions/18288864/how-to-multipart-data-using-android-volley –

+0

上面的代码是基于该链接编写的...但它不适合我.. – Manikanta

回答

1

尝试

public MultiPartRequest(String url, String filePath, Response.Listener<String> listener, Response.ErrorListener errorListener) 
{ 
    super(Method.POST, url, errorListener); 
    entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
    file = new File(filePath); 
    mListener = listener; 
    buildMultipartEntity(); 
} 

也,在我来说,我没有重载getHeaders,刚刚过去的其他值与addPart,如:

entity.addPart("file", new FileBody(file, "image/jpeg")); // for image 
    entity.addPart("id", new StringBody(userid)); 

希望这有助于。

相关问题