android 批量上传图片+Servlet接收文件

1、批量上传图片的功能,网上例子也有,我翻阅好多,说是批量上传,几乎都是只能上传一个文件,需要修改后才能实现批量上传。当然,主要功能也是借鉴网友的。这里是我从自己的一个android应用里摘出来的(主要是模拟微信选图并发表)。下面就开始批量上传了。


2、客户端纯android,服务端需要引入org.apache.commons.fileupload这个包,大家直接搜吧


一:客户端

package com.example.netease.net;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.UUID;

import com.example.netease.util.AppLog;

/**
 * 批量上传文件
 * 
 * @author winter__17
 * 
 */
public class UploadUtils2 {

	private static final int TIME_OUT = 1000 * 60 * 5; // 超时时间
	private static final String CHARSET = "UTF-8"; // 设置编码
	private static String CONTENT_TYPE = "multipart/form-data"; // 内容类型

	/**
	 * 批量上传图片文件
	 * 
	 * @param files
	 * @param url
	 * @return
	 */
	public static String uploadFile(List<File> files, String url) {
		try {
			String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
			HttpURLConnection conn = getHttpURLConnection(url, BOUNDARY); // 获取连接
			OutputStream outputSteam = conn.getOutputStream(); // 得到输入流
			DataOutputStream dos = new DataOutputStream(outputSteam);
			for (File file : files) {
				if (file != null) {
					// 添加文件主体
					StringBuffer sb = new StringBuffer();
					sb.append("--" + BOUNDARY + "\r\n");// 开始标识
					sb.append("Content-Disposition: form-data; name=\"img\"; filename=\"" + file.getName() + "\"" + "\r\n");
					sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + "\r\n");
					sb.append("\r\n");
					dos.write(sb.toString().getBytes());
					InputStream is = new FileInputStream(file);
					byte[] bytes = new byte[1024];
					int len = 0;
					while ((len = is.read(bytes)) != -1) {
						dos.write(bytes, 0, len);
					}
					is.close();
					dos.write("\r\n".getBytes());
					dos.flush();
				}
			}
			dos.write(("--" + BOUNDARY + "--" + "\r\n").getBytes());// 添加结束语
			dos.flush();
			dos.close();
			// 读取结果
			if (conn.getResponseCode() == 200) {
				BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), CHARSET));
				StringBuffer result = new StringBuffer();
				String inputLine;
				while ((inputLine = in.readLine()) != null) {
					result.append(inputLine);
				}
				in.close();
				AppLog.error("返回:" + result.toString());
				return result.toString();
			}
		} catch (IOException e) {
			AppLog.error("上传失败:" + files.toString(), e);
		}
		return null;
	}

	private static HttpURLConnection getHttpURLConnection(String url, String BOUNDARY) throws IOException {
		HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
		conn.setReadTimeout(TIME_OUT);
		conn.setConnectTimeout(TIME_OUT);
		conn.setDoInput(true); // 允许输入流
		conn.setDoOutput(true); // 允许输出流
		conn.setUseCaches(false); // 不允许使用缓存
		conn.setRequestMethod("POST"); // 请求方式
		conn.setRequestProperty("Charset", CHARSET); // 设置编码
		conn.setRequestProperty("connection", "keep-alive");
		conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);// 在header中设置边界线
		return conn;
	}
}

二:服务端接收

package servlet;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import dao.userinfo;

public class register extends HttpServlet {

	private static final long serialVersionUID = 5737830359245199872L;
	private static final long MAXSize = 1024 * 1024 * 8L;// 8MB

	public void init() throws ServletException {
	}

	public register() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		return;
	}

	@SuppressWarnings("unchecked")
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

		userinfo info = new userinfo();

		String email = URLDecoder.decode((request.getParameter("em")) != null ? request.getParameter("em") : "",
				"utf-8");
		info.setEmail(new String(email.getBytes("iso-8859-1"), "utf-8"));
		String name = URLDecoder
				.decode((request.getParameter("us")) != null ? request.getParameter("us") : "", "utf-8");
		info.setName(new String(name.getBytes("iso-8859-1"), "utf-8"));
		String password = URLDecoder.decode(request.getParameter("pa") != null ? request.getParameter("pa") : "",
				"utf-8");
		info.setPassword(new String(password.getBytes("iso-8859-1"), "utf-8"));
		String autograph = URLDecoder.decode(request.getParameter("au") != null ? request.getParameter("au") : "",
				"utf-8");
		info.setAutograph(new String(autograph.getBytes("iso-8859-1"), "utf-8"));
		info.setSex(Integer.valueOf((request.getParameter("se")) != null ? request.getParameter("se") : "-1"));
		String address = URLDecoder.decode(request.getParameter("ad") != null ? request.getParameter("ad") : "",
				"utf-8");
		info.setAddress(new String(address.getBytes("iso-8859-1"), "utf-8"));
		info.setTel((request.getParameter("tel")) != null ? request.getParameter("tel") : "");
		info.setImei((request.getParameter("im")) != null ? request.getParameter("im") : "");
		info.setQd((request.getParameter("ch")) != null ? request.getParameter("ch") : "");
		String uuid = UUID.randomUUID().toString();
		info.setId(uuid);
		// 接收icon图片
		try {
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setSizeMax(MAXSize);
			String filedir = getServletContext().getRealPath("image/icon/" + uuid);
			File dirf = new File(filedir);
			if (!dirf.exists()) {
				dirf.mkdirs();
			}
			List<FileItem> items = upload.parseRequest(request);
			ContextListener.Log.info("文件数量:" + items.size());
			if (items != null && !items.isEmpty()) {
				for (FileItem fileItem : items) {
					String filepath = filedir + File.separator + fileItem.getName();
					ContextListener.Log.info("文件保存路径为:" + filepath);
					File file = new File(filepath);
					InputStream inputSteam = fileItem.getInputStream();
					BufferedInputStream fis = new BufferedInputStream(inputSteam);
					FileOutputStream fos = new FileOutputStream(file);
					int f = 0;
					while ((f = fis.read()) != -1) {
						fos.write(f);
					}
					fos.flush();
					fos.close();
					fis.close();
					inputSteam.close();
				}
				info.setIcon(filedir);
			}
		} catch (FileUploadException e) {
			ContextListener.Log.error("接收icon图片失败", e);
		}
		ContextListener.Log.info(info.toString());
		PrintWriter out = response.getWriter();
		if (saveRegisterInfo(info)) {
			out.print(uuid);
		} else {
			out.print(0);
		}
		out.flush();
		out.close();
	}
	private boolean saveRegisterInfo(userinfo info) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = ContextListener.getConnection();
			// 时间戳
			String updatesql = "insert into user(id,email,name,password,autograph,sex,address,tel,icon,imei,qd) values (?,?,?,?,?,?,?,?,?,?,?)";
			pstmt = conn.prepareStatement(updatesql);
			pstmt.setString(1, info.getId());
			pstmt.setString(2, info.getEmail());
			pstmt.setString(3, info.getName());
			pstmt.setString(4, info.getPassword());
			pstmt.setString(5, info.getAutograph());
			pstmt.setInt(6, info.getSex());
			pstmt.setString(7, info.getAddress());
			pstmt.setString(8, info.getTel());
			pstmt.setString(9, info.getIcon());
			pstmt.setString(10, info.getImei());
			pstmt.setString(11, info.getQd());
			pstmt.executeUpdate();
			return true;
		} catch (Exception e) {
			ContextListener.Log.error("保存注册用户失败", e);
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
			} catch (SQLException e) {
			} finally {
				ContextListener.freeConnection(ContextListener.DBName, conn);
			}
		}
		return false;
	}
}

三、首次发文,欢迎大家批评

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值