AsyncHttpClient实现上传 HttpURLConnection实现下载

HttpURLConnection 上传不可以
在HttpURLConnecition中,要使用post将请求体写出,但是抓包的请求体是乱码
    1,先设置连接可以写出conn.setDoOutput(true);
    2,如果是登陆,将用户名和密码封装成一个字符中请求体
    3,获取连接输出流,然后将请求体字符串输出
AsyncHttpClient
1,将要上传的文件路径封装成文件路径对象(只能上传手机上的文件,不能上传电脑上的文件)
2,创建一个AsyncHttpClient对象client
3,创建一个请求参数对象RequestParams params = new RequestParams();
4,添加参数,params.put("filename",file);
5,调用client.post("服务器请求路径",params,AsyncHttpResponseHandler的子类对象);
6,重写onSuccess和onFailture方法
注意事项:第一,一定要添加网络权限,第二因为是手机端只能上传手机上的文件
HttpClient
这个没有讲,应该也不行
文件上传的操作
使用AsyncHttpClient第三方源码
1,获取要上传文件 的路径并封装成file对象
2,创建一个AsyncHttpClient对象client
3,调用client的post方法
    第一个参数:path,抓包获取的服务器提交的路径
    第二个参数:params,RequestParams的对象,将请求的参数封装在params中,用户名,密码,提交的文件对象
    第三个参数:responseHandler,可以创建一个子类AsyncHttpResponseHandler的子类对象
        在onSuccess方法中,判断状态码,并给出相应的提示
注意事项:
    1,因为是AsyncHttpClient是异步的,所以可以在主线程中,不需要创建一个子线程
    2,因为是网络请求 一定要添加Internet权限
    3,服务器提交的地址,一定是IP地址,不能是用localhost之类的
    4,将文件往sdcard里面写的命令行
        电脑往手机写: adb push "filepath" /sdcard/;
        手机读sdcard文件: /sdcard/"filepath"
HttpURLConnection下载步骤
1,将要下载的路径封装成一个url对象(一定是可以下载的路径)
2,通过url获取conn,并设置conn的各种属性,最重要的是setRequestMethod("POST");
3,判断code,如果是200,通过conn获取要下载的文件大小len
4,在本地创建一个RandomAccessFile文件,并设置长度 raf.setLength(len);
5,定义线程个数threadCount,每个线程要下载的字节大小threadSize,线程的开始下载位置startIndex,结束下载位置endIndex
6,for循环,给线程的threadId,线程的开始位置startIndex,endIndex进行赋值,并开启线程
7,定义一个MyThread类继承Thread,要放在主类的外面
8,定义threadId,startIndex,endIndex,并通过构造方法进行初始化
9,将要下载的路径封装成url对象
10,设置conn的属性,是重要的是设置请求头属性range ,conn.setRequestProperty("range" , "bytes="+startIndex+"-"+endIndex);
    如果range属性设置错误会出现416,作用,设置请求的文件的起始位置
11,获取响应码,如果是206,获取输入流
12,创建一个RandomAccessFile,并设置raf.seek(startIndex),表示从这个位置开始写出
13,将输入流is中的数据放入到内存,raf将内存中的数据写出到文件,并可以设置写出的位置
14,关闭输入流is和随机访问流raf

注意事项:
    1,要下载的路径一定是一个可下载的文件
    2,在知道要下载文件大小后,通过raf创建本地文件,一定要设置文件的大小为len
    3,在子线程中设置请求头range的时候一定要注意格式,conn.setRequestProperty("range","bytes:"+startIndex+"-"+endIndex);不然会出现416错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值