Java项目小bug

最近在一个项目测试的时候有一些小bug,总结一下以后提醒自己!!!

日期格式问题

项目中的日期是点击之后弹出一个日历的东西让用户选择;但如果用户硬是要输入不规则的字符串的话,就会报错。
解决:校验字符串的格式是否是想要的日期格式

public static boolean isValidDate(String str) {
      boolean convertSuccess=true;
     // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
       SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm");
       try {
     // 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
          format.setLenient(false);
          format.parse(str);
       } catch (ParseException e) {
          // e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
           convertSuccess=false;
       } 
       return convertSuccess;
}

这样就会把报错信息包装,不让用户看到啦

整数长度限制问题

项目中有一个input是让输入整数表示网线长度,但是如果用户输入100000000000000000000000的话,就会报错
解决:限制最大输入的数字
java中int的范围:-2147483648~2147483647
可以添加验证,不能是负数并且不能超过最大范围

上传附件问题

项目中填写信息的时候需要上传特定类型的文件,问题就来了,如果用户上传1G大小左右的文件,页面就会没有响应并且卡死在那个界面。
解决:限制上传文件的大小和类型

public static String fileUpload(HttpServletRequest request,HttpServletResponse response)throws Exception
{
    //允许上传的文件类型
    String fileType = "mp3,mp4,video,rmvb,pdf,txt,xml,doc,gif,png,bmp,jpeg";
    //允许上传的文件最大大小(100M,单位为byte)
    int maxSize = 1024*1024*100;
    response.addHeader("Access-Control-Allow-Origin", "*");
    //文件要保存的路径
    String savePath = request.getRealPath("/") + "save/";
    response.setContentType("text/html; charset=UTF-8");
    //检查目录
    File uploadDir = new File(savePath);
    if ( !uploadDir.exists())
    {
       uploadDir.mkdirs();
    }
    if ( !uploadDir.canWrite())
    {
       return "上传目录没有写权限!";
    }
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(1024 * 1024); //设置缓冲区大小,这里是1M
    factory.setRepository(uploadDir); //设置缓冲区目录

    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setHeaderEncoding("UTF-8");

    List items = upload.parseRequest(request);
    Iterator it = items.iterator();
    FileItem item = null;
    String fileName = "";
    String name = "";
    String extName = "";
    String newFileName = "";
    while (it.hasNext())
    {
        item = (FileItem)it.next();

        fileName = item.getName();
        if (null == fileName || "".equals(fileName))
        {
            continue;
        }

        //判断文件大小是否超限
        if (item.getSize() > maxSize)
        {
            item.delete();
            JOptionPane.showMessageDialog(null, "文件大小超过限制!应小于" + maxSize
                                                / 1024 / 1024 + "M");
            return "文件大小超过限制!应小于" + maxSize;
        }

        //判断文件类型是否匹配
        //            System.getProperties().getProperty("file.separator"))
        //获取文件名称
        name = fileName.substring(fileName.lastIndexOf("\\") + 1,
            fileName.lastIndexOf("."));
        //获取文件后缀名
        extName = fileName.substring(fileName.indexOf(".") + 1).toLowerCase().trim();

        //判断是否为允许上传的文件类型
        if ( !Arrays.<String> asList(fileType.split(",")).contains(extName))
        {
            item.delete();
            JOptionPane.showMessageDialog(null, "文件类型不正确,必须为" + fileType
                                                + "的文件!");
            return "文件类型不正确,必须为" + fileType
                                                + "的文件!";
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
        newFileName = name + df.format(new Date()) + "." + extName;
        File uploadedFile = new File(savePath, newFileName);
    item.write(uploadedFile);
    }

    return "success";
}

通过getSize()和文件后缀名可以判断文件的大小和类型

Reference

https://www.cnblogs.com/shihaiming/p/6210607.html
https://blog.csdn.net/moyanxuan_1993_2_24/article/details/45693705

猜你喜欢

转载自blog.csdn.net/MCmango/article/details/85337986