在进行上传之前需要
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
这两个包。
前端代码:
在需要文件上传的表单中,需要把 enctype 设置为 multipart/form-data
设施名称 | |
类别 | |
照片 | |
简介 | |
后台的代码:
因为在页面使用了 multipart/form-data 方式进行提交,所有servlet后台不能用request.getParameter("name")来进行获取到对应的值,而是使用ServletFileUpload对象来进行解析。
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
// 获取根目录对应的真实物理路径(即部署在服务器的地址)
// 也就是说我们要把文件或图片存放到uploadImage该目录下
String path = getServletContext().getRealPath("uploadImage");
File uploadPath = new File(path);
// 如果目录不存在
if (!uploadPath.exists()) {
uploadPath.mkdir();
}
// 临时目录
File tempPath = new File(getServletContext().getRealPath("temp"));
if (!tempPath.exists()) {
tempPath.mkdir();
}
// DiskFileItemFactory:创建 FileItem 对象的工厂,可以设置相应的属性。
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置在内存中的大小
factory.setSizeThreshold(4096);
// 如果大小超过了内存中的设置的上限,则存到该临时目录下
factory.setRepository(tempPath);
ServletFileUpload upload = new ServletFileUpload(factory);
// 上传文件或图片的最大的大小,如果文件超过这个限制,则抛出异常
upload.setSizeMax(1000000 * 20);
try {
//获取所有的请求域
List fileItems = upload.parseRequest(request);
String name = null;
String type = null;
String desc = null;
String fileName = null;// 文件或照片的名字
for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
//获取每个域
FileItem item = (FileItem) iter.next();
// 判断是文件还是文本信息
// 是普通的表单输入域
if (item.isFormField()) {
if ("name".equals(item.getFieldName())) {
//获取普通表单域的值
name = item.getString("gb2312").trim();
}
if ("type".equals(item.getFieldName())) {
type = item.getString("gb2312").trim();
}
if ("desc".equals(item.getFieldName())) {
desc = item.getString("gb2312").trim();
}
}
// file域
if (!item.isFormField()) {
// 上传文件的名称和完整路径
fileName = item.getName();
long size = item.getSize();
// 判断是否选择了文件
if ((fileName == null || fileName.equals("")) && size == 0) {
continue;
}
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());
item.write(new File(uploadPath, fileName));
}
}
// 将文件或图片文件名写入数据库
String sql = null;
db d = new db();
d.executeInsert(sql);
//继续后续操作
} catch (Exception e) {
System.out.println("上传失败");
e.printStackTrace();
}
}