上传图片到指定服务器

来源:互联网 发布:海湾消防主机联动编程 编辑:程序博客网 时间:2024/05/23 15:48

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 stubrequest.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 blocke.printStackTrace();}}}}
3.服务器端需要加载一下两个包 

  可以再网上进行下载














原创粉丝点击