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;
}
}
三、首次发文,欢迎大家批评