文件上传重名与乱码问题


前言

在javv学习javaweb中 上传文件发生的乱码以及重名覆盖问题。


一、文件乱码问题

在执行上传请求时,设置请求的字符集即可解决

 req.setCharacterEncoding("utf8");

二、文件重名问题

在上传文件时,如果上传的文件已经存在同名的文件,那么就会覆盖原文件。

1.上传操作文件重名问题分析

每一个客户端都可以进行文件上传操作,那么当我们上传的文件过多,一定会出现同名的文件,那么在服务器端只能保存一个,对于这个问题,我们在上传文件时,就需要考虑文件重名问题

2.上传操作文件重名解决方案

一般情况下,对于上传文件,为了保证不重名,会给文件起一个随机名.:
有两种方案:

  • 一种方案用UUID
  • 一种方案是使用毫秒值
   //设置请求的字符集
        req.setCharacterEncoding("utf8");
        //获取上传到服务器的临时文件对象
        Part file = req.getPart("file");
        //获取上传的文件名
        String fileName = file.getSubmittedFileName();
        //获取登录用户的用户名
        String loginName= SessionUtils.getLoginName(req);

        //获取当前日期
        String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//        设置用户下的日期文件夹路径
        String dateDirPath= "C:/Users/admin/Desktop/upload/" +loginName +"/" + dateFormat;
        //获取dateDirPath路径的文件夹
        File dateDir=new File(dateDirPath);
        if(!dateDir.exists()) {
            dateDir.mkdirs();
        }

        //获取UUID
        String NewFileName = UUIDUtils.getUUID();
        String suffix = null;
        System.out.println("获取后缀名");
        if (fileName != null && fileName.length() > 0){
            suffix = fileName.substring(fileName.lastIndexOf("."));
        }

        StringBuilder stringBuilder = new StringBuilder(NewFileName);
        //构建上传的文件名
        String uploadfilepathname = stringBuilder.append(suffix).toString();
        //构建I流
        InputStream inputStream = file.getInputStream();
        //构建O流
        FileOutputStream fileOutputStream = new FileOutputStream(dateDir+"/"+uploadfilepathname);
        IOUtils.readeAndWrite(inputStream, fileOutputStream);
        resp.sendRedirect("/index");

最后效果为:
在这里插入图片描述


总结

个人对于上传文件时的重名与乱码的一些尝试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值