1:文件上传
一般做法:
把用户本地图片上传到服务器上去
把存放的路径存储到数据库当中去
文件上传一般要用到第三方的上传组件
1:commons-fileUpload (非常主流)
2:smartUpload ->编码处理不是很好
commons-fileUpload 上传步骤
例如:对一个注册用户实现上传头像;
用户类有
private String name;private String pass;private String sex;private String className;private String photoImg;
属性
1:项目中导入commons-fileUpload 的驱动类jar包,创建一个用于保存用户头像的uploadFiles 文件夹
文件上传的时候,form表单上面必须加上
姓名:
密码:
性别:男
女
班级名:
头像:
<p><input type="submit" value=" 注册 "/>
<input type="reset" value=" 重置 "/>
</p>
servlet中的写法:
2:创建文件上传的磁盘工厂类
3:创建文件上传对象
4:解析用户提交的表单
5:湖区文件上传域 ,做文件上传
eg:
public class RegServlet extends HttpServlet {
private StudentDao studentDao;
public void init() throws ServletException {
studentDao = new StudentDaoImpl();
}
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 创建磁盘工厂
DiskFileItemFactory df = new DiskFileItemFactory();
// 创建文件上传对象
ServletFileUpload upload = new ServletFileUpload(df);
Student s = new Student();
// 解析用户提交的表单
try {
// items 代表页面提交过了的所有域 包括 文本域文件域
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
// 判断当前提交的表单项 是文本域还是文件域
if (item.isFormField()) {
// 文本域
String name = item.getFieldName(); // 获取文本域的名称
String value = item.getString("utf-8"); // 获取文本域的值
// System.out.println(name+"-->"+value);
if ("name".equals(name)) {
s.setName(value);
}
if ("pass".equals(name)) {
s.setPass(value);
}
if ("sex".equals(name)) {
s.setSex(value);
}
if ("className".equals(name)) {
s.setClassName(value);
}
} else {
// 文件域
// 重组新的名字
String fileName = item.getName();
System.out.println("fileName" + fileName);
String newName = System.currentTimeMillis() + "";
String fileType = fileName.substring(fileName
.lastIndexOf("."));
String newfileName = newName + fileType;
System.out.println(newfileName);
// 获取创建的保存用户头像的uploadFiles文件夹在真正服务器上的运行的目录
String relpath = request.getRealPath("/uploadFiles");
System.out.println("relpath=" + relpath);
// new File(文件夹名 ,文件名)
File file = new File(relpath, newfileName);// 0kb
// 把选择的文件字节码写入到 刚刚创建的文件 file 里面
item.write(file);
s.setPhotoImg("uploadFiles/" + newfileName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
boolean f = studentDao.addStudent(s);
if (f) {
response.sendRedirect("success.jsp");
} else {
response.sendRedirect("error.jsp");
}
}
}
上传完后可以在页面上显示并且还可以进行下载:
//显示
下载 // 下载