上传图片到指定服务器

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.服务器端需要加载一下两个包 

  可以再网上进行下载














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值