soongbo 发表于 2013-1-15 02:30:55

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:");@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overrideprotected 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, req.getInputStream(), "UTF-8").replaceAll("\"", "");File destFile = new File(savePath);os = new FileOutputStream(destFile);byte[] tempByte = new byte;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);}}
页: [1]
查看完整版本: Java开发中文件上传应用