Android使用put上傳圖片和所有類型的文件

 

需要導入httpmime的jar包
@SuppressWarnings("deprecation")
public final class UpLoadImageByPut {

    private Handler handler;
    private static UpLoadImageByPut instance;
    public static final int UPLOAD_SUC = 8001;
    public static final int UPLOAD_FAIL = 8002;


//此處使用單例模式,傳入一個Handler,請求結束後通過Handler來告訴UI線程
    public static UpLoadImageByPut getInstance(Handler handler) {
        if (instance == null) {
            if (handler != null) {
                instance = new UpLoadImageByPut(handler);
            } else {
                throw new IllegalArgumentException("you should put a handler");
            }
        }
        return instance;

    }

//構造函數私有化
    private UpLoadImageByPut(Handler handler) {
        this.handler = handler;
    };

//實際執行上傳的方法
    private String doMultiPut(String url, List<NameValuePair> params) {

        String response = "fail to upload image...";

        HttpClient httpClient = new DefaultHttpClient();
        HttpPut httpPut = new HttpPut(url);

        try {
            MultipartEntity entity = new MultipartEntity();
            for (int i = 0; i < params.size(); i++) {
                String name = params.get(i).getName();//這裏的每一個name對應於每一個key,修改即可
                String value = params.get(i).getValue();

                if (!TextUtils.isEmpty(value)) {
                    if (name.equals("ticketId")) {
                        entity.addPart("ticketId", new StringBody(value,
                                Charset.forName("UTF-8")));
                    } else if (name.equals("remark")) {
                        entity.addPart("remark", new StringBody(value));
                    } else if (name.equals("image")) {

//這裏是重點,根據傳入的圖片路徑構造出FIle,然後add進去即可
                        File f = new File(value);
                        FileBody fileBody = new FileBody(f);
                        entity.addPart("image", fileBody);
                    }
                }
            }

            httpPut.setEntity(entity);
            HttpResponse res = httpClient.execute(httpPut);
            Message msg = new Message();
            Gson gson = new Gson();
            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                response = EntityUtils.toString(res.getEntity(), HTTP.UTF_8);
                ResponseData data = gson.fromJson(response, ResponseData.class);
                msg.what = UPLOAD_SUC;
                msg.obj = data.getMessage();
                handler.sendMessage(msg);
            } else {
                response = EntityUtils.toString(res.getEntity(), HTTP.UTF_8);
                ResponseData data = gson.fromJson(response, ResponseData.class);
                msg.what = UPLOAD_FAIL;
                msg.obj = data.getMessage();
                handler.sendMessage(msg);
            }

            // // create response handler
            // ResponseHandler<String> handler = new BasicResponseHandler();
            //
            // // execute and get response
            // response = new String(httpClient.execute(httpPut, handler)
            // .getBytes(), HTTP.UTF_8);
        } catch (Exception e) {
            handler.sendEmptyMessage(400);
            e.printStackTrace();
        }
        return response;
    }

//提供給外部調用的方法,這裏使用一個自定義的實體ResolveTicket來傳參數
    public String upLoadImage(String path, ResolveTicket ticket) {

        String result = "fail to request...";

        if (ticket != null) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("ticketId", ticket.getTicketId()));//在這裏加入參數,參數以鍵值對的形式出現,文件或圖片值就傳入路徑
            params.add(new BasicNameValuePair("remark", ticket.getRemark()));
            String images[] = ticket.getImages();
            for (String fileDir : images) {
                params.add(new BasicNameValuePair("image", fileDir));
            }
            result = doMultiPut(path, params);//第三個參數,暫時傳入圖片的路徑
        }
        return result;
    }
}

//ResolveTicket實體的定義

public class ResolveTicket {

    private String ticketId;//參數一:id
    private String remark;//參數二:標記
    private String[] images;

    public String getTicketId() {
        return ticketId;
    }

    public void setTicketId(String ticketId) {
        this.ticketId = ticketId;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String[] getImages() {
        return images;
    }

    public void setImages(String[] images) {
        this.images = images;
    }
}



 

發佈了44 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章