android批量文件上传(服务器采用servlet处理)

本文介绍了Android客户端如何通过不同方式实现文件批量上传到服务器,包括使用SpringMVC、StrutsMVC以及直接通过Servlet的方式。重点讲解了Servlet的实现,涉及DiskFileItemFactory和ServletFileUpload,以及如何处理iOS客户端的AFNetworking封装的文件流。同时,提供了Android客户端使用HTTP协议直接上传文件的示例代码。
摘要由CSDN通过智能技术生成
 1.android客户端+springMVC服务端:服务端采用org.springframework.web.multipart.MultipartHttpServletRequest作为批量上传接收类
说明:MultipartHttpServletRequest对象是封装了servlet的,可以处理ios端使用AFNetworking封装文件流对象multipartFiles;封装的multipartparameters为请求参数。
	public void sendBroadcast(HttpServletRequest request, HttpServletResponse response) throws Exception {
   
		//在springMVC的框架下,在方法中处理客户端传过来的文件流及参数
		//文件件的接收方式如下:
		MultipartHttpServletRequest mureq = (MultipartHttpServletRequest) request;
		Map<String, MultipartFile> files = mureq.getFileMap();
		for (String key : files.keySet()) {
			MultipartFile file = files.get(key);
			InputStream inS = file.getInputStream();
			Map<String, String> map = FileUpload.getInstance().uploadImgVideoFile(inS, DBConstant.FILE_SUFFIX);
 
 
		}
		//获取到文件流之后,可以通过第三方上传插件进行文件上传,或者使用jdk自带的方法处理文件流
		//ios封装的参数,服务端可以使用request.getParameterMap()获取
     }
 2.android客户端+strutsMVC服务端:这种搭配下的多文件上传(后期单独说明)
 3.android客户端+servlet服务端(继承自httpServlet):这种搭配下的多文件上传
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(40960); // 设置缓冲区大小,这里是40kb
        factory.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节
        ServletFileUpload upload = new ServletFileUpload(factory);// 通过工厂生成一个处理文件上传的servlet对象
        upload.setSizeMax(1 * 1024 * 1024 * 1024 * 10);// 一共最多能上传10G

            List<FileItem> list = upload.parseRequest(request);
            for (FileItem fileItem : list)
            {
            	 if (fileItem.getName() != null)
                 {
            		 System.out.println("--------------"+fileItem.getInputStream());
            		  Map<String, String> result = FileUpload.getInstance()
                              .uploadOrinImg(fileItem.getInputStream());
                          Map<String, String> result2 = FileUpload.getInstance()
                              .uploadThumbImg(fileItem.getInputStream());
                          if (result.containsKey("group_name")
                              && result.containsKey("remote_filename")
                              && result2.containsKey("group_name")
                              && result2.containsKey("remote_filename"))
                          {
                              String ur1 = "/" + result.get("group_name")
                                  + "/" + result.get("remote_filename");
                             String ur2 = "/" + result2.get("group_name")
                                  + "/" + result2.get("remote_filename");
                      }
                 }
            }
   可以访问httpservlet的链接,需要在web.xml中配置如下:
  <servlet>
  <servlet-name>fileUploadImage</servlet-name>
  <servlet-class>com.FileUploadImage</servlet-class>
  </servlet>
  <servlet-mapping>
	<servlet-name>fileUploadImage</servlet-name>
	<url-pattern>fileUploadImage.action</url-pattern>
  </servlet-mapping>

或者:使用原始的方式获取客户羰传过来的流文件 
encodeImgVideo:表示接收的客户端的流文件
BASE64Decoder decoder = new BASE64Decoder();
// Base64解码
byte[] b = decoder.decodeBuffer(encodeImgVideo);
for (int i = 0; i < b.length; ++i) {
	if (b[i] < 0) {
		// 调整异常数据
		b[i] += 256;
	}
}
InputStream input = new ByteArrayInputStream(b);

andriod端代码转载网上,谢谢分享,如下:
   
   
   
public class SocketHttpRequester {
/**
*多文件上传
* 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:
* <FORM METHOD=POST ACTION="http://192.168.1.101:8083/upload/servlet/UploadServlet" enctype="multipart/form-data">
<INPUT TYPE="text" NAME="name">
<INPUT TYPE="text" NAME="id">
<input type="file" name="imagefile"/>
<input type="file" name="zip"/>
</FORM>
* @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.iteye.cn或http://192.168.1.101:8083这样的路径测试)
* @param params 请求参数 key为参数名,value为参数值
* @param file 上传文件
*/
public static boolean post ( String path , Map < String , String > params , FormFile [] files ) throws Exception {
final String BOUNDARY = "---------------------------7da2137580612" ; //数据分隔线
final String endline = "--" + BOUNDARY + "--\r\n" ; //数据结束标志
int fileDataLength = 0 ;
for ( FormFile uploadFile : files ){ //得到文件类型数据的总长度
StringBuilder fileExplain = new StringBuilder ();
fileExplain . append ( "--" );
fileExplain . append ( BOUNDARY );
fileExplain . append ( "\r\n" );
fileExplain . append ( "Content-Disposition: form-data;name=\"" + uploadFile . getParameterName ()+ "\";filename=\"" + uploadFile . getFilname () + "\"\r\n" );
fileExplain .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值