Android使用put上传图片和所有类型的文件

3 篇文章 0 订阅
1 篇文章 0 订阅

 

需要导入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;
    }
}



 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值