`
soongbo
  • 浏览: 87071 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java开发中文件上传应用

    博客分类:
  • Java
阅读更多
   今天闲暇无所事事,很长时间没有写博客了,突然想起很多开发web项目中,对于文件上传习惯于使用Apache下commons-fileupload来实现上传。本人实现了一个servlet文件的上传,由于本人水平有限,希望各位大虾拍砖。废话不多讲,直接上主菜………
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

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

public class UploadServlet extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private static final String saveDir = new String("e:");
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		InputStream is = null;
		FileOutputStream os = null;
		try {
			is = req.getInputStream();
			String savePath = saveDir + File.separator + getFileName(
					new byte[1024], req.getInputStream(), "UTF-8")
					.replaceAll("\"", "");
			
			File destFile = new File(savePath);
			os = new FileOutputStream(destFile);
			byte[] tempByte = new byte[1024];
			int byteread = 0;
			while ((byteread = is.read(tempByte)) != -1) {
				os.write(tempByte, 0, byteread);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != is) {
				is.close();
			}
			if (null != os) {
				os.close();
			}
		}
	}
	
	/**
	 * 获得文件名称
	 * @param buffer
	 * @param servletinputstream
	 * @param charset
	 * @return
	 */
	private String getFileName(byte[] buffer, ServletInputStream servletinputstream, String charset) {
		String line = null;
		while ( (line = readLine(servletinputstream, buffer, charset)) != null) {
			if (line.startsWith("Content-Disposition: form-data;")) {
				int i = line.indexOf("filename=");
				if (i >= 0) {
					String fName = subFullName(line);
					if (fName.equals("")) {
							continue;
						}
					return fName;
				}
			} else {
				continue;
			}
		}
		return null;
	}
	
	/**
	 * 读取指定byte[]数组长度的String
	 * @param is
	 * @param buffer
	 * @param charset
	 * @return
	 */
	private String readLine(ServletInputStream is, byte[] buffer, String charset) {
		int len = 0;
		try {
			len = is.readLine(buffer, 0, buffer.length);
			if (-1 == len) {
				return null;
			}
			if (null != charset) {
				return new String(buffer, 0, buffer.length);
			} else {
				return new String(buffer, 0, buffer.length, charset);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 截取文件名称
	 * @param line
	 * @return
	 */
	private String subFullName(String line) {
		if (line == null) {
			return "";
		}
		int i = line.indexOf("filename=");
		line = line.substring(i + 9).trim();
		i = line.lastIndexOf("");
		if (i < 0 || i >= line.length() - 1) {
			i = line.lastIndexOf("/");
			if (line.equals("")) {
				return "";
			}
			if (i < 0 || i >= line.length() - 1) {
				return line;
			}
		}
		return line.substring(i + 1, line.length() - 1);
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics