Android中使用HttpPost实现数据与文件同时上传的功能

Android中使用HttpPost实现数据与文件同时上传的功能,第1张

第一步:编写一个Servlet,把接收到的HTTP信息保存在一个文件中,代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//获取输入流,是HTTP协议中的实体内容

ServletInputStream sis=request.getInputStream()

//缓冲区

byte buffer[]=new byte[1024]

FileOutputStream fos=new FileOutputStream("d://file.log")

int len=sis.read(buffer, 0, 1024)

//把流里的信息循环读入到file.log文件中

while( len!=-1 )

{

fos.write(buffer, 0, len)

len=sis.readLine(buffer, 0, 1024)

}

fos.close()

sis.close()

}

第二步:实现如下图1的的表单页面,生成一个注册表单,提交到Servlet中

详细的代码如下:

<form action="servlet/ReceiveFile" method="post" enctype="multipart/form-data">

第一个参数<input type="text" name="name1"/><br/>

第二个参数<input type="text" name="name2"/><br/>

第一个上传的文件<input type="file" name="file1"/><br/>

第二个上传的文件<input type="file" name="file2"/><br/>

<input type="submit" value="提交">

</form>

注意了,由于要上传附件,所以一定要设置enctype为multipart/form-data,才可以实现附件的上传。

第三步:填写完信息后按“提交”按钮后,在D盘下查找file.log文件用记事本打开,数据如下:

-----------------------------7d92221b604bc

Content-Disposition: form-dataname="name1"

hello

-----------------------------7d92221b604bc

Content-Disposition: form-dataname="name2"

world

-----------------------------7d92221b604bc

Content-Disposition: form-dataname="file1"filename="C:/2.GIF"

Content-Type: image/gif

GIF89a

android 开发中图片上传是很正常的,有两种可用的方式

下面我们就说明一下以文件流上传图片的方式, 实现网络框架是Retrofit

测试上传3张手机sd卡中的图片,并传人了参数EquipmentCode, Description, ReportUserCode等

其中的思路是: Post的方式,Content-Type:multipart/form-data的类型进行上传文件的。

其中MultipartBody是RequestBody的扩展,

看看请求头的信息, 请求中携带了所有信(如果接口开发人员说不能收到, 叫他自己想想,截图给他,哈哈哈:)

上面的是上传了3张图片,如果一张,只要传一个就行!

就这样,图片上传的两种方式ok拉,测试通过的,保证正确!

参考: https://www.jianshu.com/p/acfefb0a204f

可使用android自带的httpclient框架实现,附件中已经现成的示例代码,带上传进度。

1. GET 方式传递参数

//先将参数放入List,再对参数进行URL编码

List<BasicNameValuePair>params = new LinkedList<BasicNameValuePair>()

params.add(new BasicNameValuePair("param1", "数据"))    //增加参数1

params.add(new BasicNameValuePair("param2", "value2"))//增加参数2

String param = URLEncodedUtils.format(params, "UTF-8")//对参数编码

String baseUrl = "服务器接口完整URL"

HttpGet getMethod = new HttpGet(baseUrl + "?" + param)//将URL与参数拼接

HttpClient httpClient = new DefaultHttpClient()

try {

  HttpResponse response = httpClient.execute(getMethod)//发起GET请求

  Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode())//获取响应码

  Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"))//获取服务器响应内容

} catch (ClientProtocolException e) {

  e.printStackTrace()

} catch (IOException e) {

  e.printStackTrace()

}

2. POST方式 方式传递参数

//和GET方式一样,先将参数放入List

params = new LinkedList<BasicNameValuePair>()

params.add(new BasicNameValuePair("param1", "Post方法"))//增加参数1

params.add(new BasicNameValuePair("param2", "第二个参数"))//增加参数2

try {

  HttpPost postMethod = new HttpPost(baseUrl)//创建一个post请求

  postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8"))//将参数填入POST Entity中

  HttpResponse response = httpClient.execute(postMethod)//执行POST方法

  Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode())//获取响应码

  Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"))//获取响应内容

} catch (UnsupportedEncodingException e) {

  e.printStackTrace()

} catch (ClientProtocolException e) {

  e.printStackTrace()

} catch (IOException e) {

  e.printStackTrace()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11511285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存