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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值