1 . android客户端代码
/**
* 上传数据到指定服务器
*
* @param actionUrl
* @param file
* @throws IOException
*/
public void post(String actionUrl, File file) throws IOException {
String BOUNDARY = "---------------------------7da2137580612"; //数据分割线
String PREFIX = "--";
String LINEND = "\r\n";
String MULIIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
URL url = new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true); // 允许输入
conn.setDoOutput(true); // 允许输出
conn.setUseCaches(false); // 不允许使用缓存
conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charset", CHARSET);
conn.setRequestProperty("Content-Type", MULIIPART_FROM_DATA
+ ";boundary=" + BOUNDARY);
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
// 发送文件
if (file != null) {
StringBuilder sb = new StringBuilder();
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\"file\"; filename=\""
+ file.toString() + "\"" + LINEND);
sb.append("content-Type: application/octet-stream; charset="
+ CHARSET + LINEND);
sb.append(LINEND);
dos.write(sb.toString().getBytes());
InputStream is = new FileInputStream(file);
byte[] buffer = new byte[2048];
int len = -1;
while ((len = is.read(buffer)) != -1) {
dos.write(buffer, 0, len);
}
is.close();
dos.write(LINEND.getBytes());
// 请求结束标志
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
dos.write(end_data);
dos.flush();
dos.close();
// 得到响应码
int res = conn.getResponseCode();
System.out.println("----------" + res);
}
}
后台服务器端,采用servlet编写
package com.sunbirddata.servlet;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
/**
* Servlet implementation class ImageUploadServlet
*/
public class ImageUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
File tmpDir = null; //零时保存目录
File saveDir = null; //保存目录
/**
* @see HttpServlet#HttpServlet()
*/
public ImageUploadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
tmpDir = new File(request.getSession().getServletContext().getRealPath("/" + "temp")); // 临时目录
if(!tmpDir.exists()) tmpDir.mkdir();
saveDir = new File(request.getSession().getServletContext().getRealPath("/" + "image")); // 临时目录
if(!saveDir.exists()) saveDir.mkdir();
System.out.println("零时目录:"+tmpDir);
System.out.println("保存目录:"+saveDir);
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(tmpDir); //指定临时上传目录
factory.setSizeThreshold(1024*1024*100); //内存中缓存数据大小
ServletFileUpload sfu = new ServletFileUpload(factory);
sfu.setFileSizeMax(1024*1024*10); //单个上传文件最大尺寸
sfu.setSizeMax(1024*1024*1024); //一次上传文件的总尺寸
try {
FileItemIterator fii = sfu.getItemIterator(request); //解析request请求对象
while(fii.hasNext()){
FileItemStream fis = fii.next(); //从集合中获得一个文件流
if(!fis.isFormField() && fis.getName().length() > 0){ //过滤掉表单中的非文件域
String fileName = fis.getName().substring(fis.getName().lastIndexOf("/"));
BufferedInputStream bis = new BufferedInputStream(fis.openStream()); //获得文件输入流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(saveDir,fileName))); //获得文件输出流
Streams.copy(bis, bos, true); //写文件到指定的地址
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.服务器端需要加载一下两个包
可以再网上进行下载