java中如何实现文件上传

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");
    }
}

}

上传完后可以在页面上显示并且还可以进行下载:

//显示
下载 // 下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值