1. 程式人生 > >上傳一張或多張圖片(使用volley框架)

上傳一張或多張圖片(使用volley框架)

主要是繼承volley的Request類,然後通過使用httpmim的MultipartEntity類對檔案引數進行封裝,可以上傳一個檔案或多張檔案

public class MultipartRequestUpload extends Request<String> {

    private MultipartEntity entity = new MultipartEntity();
    private VolleyInterface listener;
    private List<File> mFileParts;
    private String mFilePartName;
    private
Map<String, String> mParams; /** * 單個檔案上傳 * * * @param url 地址 * @param filePartName 資料夾名稱 * @param file 檔案 * @param params 引數 * @param listener 監聽 * */ public MultipartRequestUpload(String url, String filePartName, File file, Map<String, String> params,VolleyInterface listener) { super
(Method.POST, url, listener.errorListener()); mFileParts = new ArrayList<File>(); if (file != null) { mFileParts.add(file); } this.mFilePartName = filePartName; this.listener = listener; this.mParams = params; buildMultipartEntity(); } /** * 多個檔案,對應一個key * * @param
url 地址 * @param filePartName 資料夾名稱 * @param file 檔案 * @param params 引數 * @param listener 監聽 * */
public MultipartRequestUpload(String url, String filePartName, List<File> files, Map<String, String> params,VolleyInterface listener) { super(Method.POST, url, listener.errorListener()); this.mFilePartName = filePartName; this.listener = listener; this.mFileParts = files; this.mParams = params; System.out.println(filePartName+"-"+files+"-"+params); buildMultipartEntity(); } private void buildMultipartEntity() { if (mFileParts != null && mFileParts.size() > 0) { for (File file : mFileParts) { entity.addPart(mFilePartName, new FileBody(file)); } } try { if (mParams != null && mParams.size() > 0) { for (Map.Entry<String, String> entry : mParams.entrySet()) { entity.addPart(entry.getKey(),new StringBody(entry.getValue(), Charset.forName("UTF-8"))); } } } catch (UnsupportedEncodingException e) { VolleyLog.e("UnsupportedEncodingException"); } } @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) { if (VolleyLog.DEBUG) { if (response.headers != null) { for (Map.Entry<String, String> entry : response.headers.entrySet()) { VolleyLog.d(entry.getKey() + "=" + entry.getValue()); } } } String parsed; try { parsed = new String(response.data,HttpHeaderParser.parseCharset(response.headers)); } catch (UnsupportedEncodingException e) { parsed = new String(response.data); } return Response.success(parsed,HttpHeaderParser.parseCacheHeaders(response)); } @Override public Map<String, String> getHeaders() throws AuthFailureError { VolleyLog.d("getHeaders"); Map<String, String> headers = super.getHeaders(); if (headers == null || headers.equals(Collections.emptyMap())) { headers = new HashMap<String, String>(); } return headers; } @Override protected void deliverResponse(String response) { this.listener.loadingListener().onResponse(response); }

然後呼叫這個方法,即可

public static void uploadMultipart(Context context, String url,String fileName,
            List<File> listFile, Map<String, String> params,
            VolleyInterface listener) {
        MultipartRequestUpload request = new MultipartRequestUpload(url,fileName, listFile, params, listener);
        BaseApplication.getHttpQueue().add(request);
        BaseApplication.getHttpQueue().start();
    }