文件上传代码
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
public class UploadServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
boolean isMultipartContent = ServletFileUpload
.isMultipartContent(request);
if (!isMultipartContent) {
throw new RuntimeException("your form is not multipart/form-data");
}
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File("f:\\"));
ServletFileUpload sfu = new ServletFileUpload(factory);
sfu.setHeaderEncoding("UTF-8");
try {
List<FileItem> fileItems = sfu.parseRequest(request);
for (FileItem fileitem : fileItems) {
if (fileitem.isFormField()) {
processFormField(fileitem);
} else {
processUploadField(fileitem);
}
}
} catch (FileUploadBase.FileSizeLimitExceededException e) {
System.out.println("文件过在,不能超过3M");
} catch (FileUploadBase.SizeLimitExceededException e) {
System.out.println("总文件大小不能超过6M");
} catch (FileUploadException e) {
e.printStackTrace();
}
}
private void processUploadField(FileItem fileitem) {
try {
InputStream is = fileitem.getInputStream();
String directoryRealPath = this.getServletContext().getRealPath(
"/WEB-INF/upload");
File storeDirectory = new File(directoryRealPath);
if (!storeDirectory.exists()) {
storeDirectory.mkdirs();
}
String filename = fileitem.getName();
if (filename != null) {
filename = FilenameUtils.getName(filename);
}
filename = UUID.randomUUID() + "_" + filename;
String childDirectory = makeChildDirectory(storeDirectory, filename);
fileitem.write(new File(storeDirectory, childDirectory
+ File.separator + filename));
fileitem.delete();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private void processUploadField1(FileItem fileitem) {
try {
InputStream is = fileitem.getInputStream();
String directoryRealPath = this.getServletContext().getRealPath(
"/WEB-INF/upload");
File storeDirectory = new File(directoryRealPath);
if (!storeDirectory.exists()) {
storeDirectory.mkdirs();
}
String filename = fileitem.getName();
if (filename != null) {
filename = FilenameUtils.getName(filename);
}
filename = UUID.randomUUID() + "_" + filename;
String childDirectory = makeChildDirectory(storeDirectory, filename);
File file = new File(storeDirectory, childDirectory
+ File.separator + filename);
FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte[] b = new byte[1024];
while ((len = is.read(b)) != -1) {
fos.write(b, 0, len);
}
fos.close();
is.close();
fileitem.delete();
} catch (IOException e) {
e.printStackTrace();
}
}
private String makeChildDirectory(File storeDirectory, String filename) {
int hashcode = filename.hashCode();
System.out.println(hashcode);
String code = Integer.toHexString(hashcode);
System.out.println(code);
String childDirectory = code.charAt(0) + File.separator
+ code.charAt(1);
File file = new File(storeDirectory, childDirectory);
if (!file.exists()) {
file.mkdirs();
}
return childDirectory;
}
private void processFormField(FileItem fileitem) {
try {
String fieldname = fileitem.getFieldName();
String fieldvalue = fileitem.getString("UTF-8");
System.out.println(fieldname + "=" + fieldvalue);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
文件上传注意问题
- 设置上传文件的大小问题;
- 判断上传文件类型,如果是可执行文件等是非常危险的;
- 如果系统较大,上传的文件比较多,注意要多分一下目录(按时间等),解决可能上传文件同名情况,以及上传文件的保存路径
- 注意设置编码问题,form表单中要有上传的属性,才能上传。
文件下载代码
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename = "电器";
if(request.getHeader("user-agent").toLowerCase().contains("msie")){
filename = URLEncoder.encode(filename, "UTF-8");
}else{
filename = new String(filename.getBytes("UTF-8"),"iso-8859-1");
}
response.setHeader("content-disposition", "attachment;filename="+filename);
response.setContentType(this.getServletContext().getMimeType(filename));
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.write("电视机,20\n");
out.write("洗衣机,10\n");
out.write("冰箱,8\n");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}