fileoutputstream 文件不存在_文件上传下载,10分钟随时随地快人一步

在web项目中,文件上传下载功能几乎是必不可少的。实现的技术有很多,今天主要跟大家分享的是利用fileupload组件配合servlet方式完成文件的上传下载。

0f5474d45fe79c7e4a3bf7bea75e2e48.png

文件上传

  1. 底层使用的是Apache fileupload组件完成上传,让开发者使用起来更加方便,所以首先需要引入fileupload组件的依赖。
85787430062ca18ee6b2f0a3de43b07a.png

2. 准备jsp页面

    上传文件        

用户名称:

用户密码:

上传文件:

3.封装上传文件方法工具类

public class FileUploadUtils {     //设置限制总的大小    private static final long  TOTALSIZEMAX = 1024*1024*2;    //设置单个文件的大小    private static final long  FILESIZEMAX = 1024*1024*1;    //设置允许上传的文件类型    private static final String  ALLOWEXT = ".png|.jpg|.gif|.zip|.xlsx";    //设置封装表单对象    public static Map formData;    /**     * 上传文件     * @param request     * @return     */    public static boolean uploadFile(HttpServletRequest request) throws FileUploadException, IOException {        boolean isNoUpload = false;        //第一步:创建上传文件工厂        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();        //第二步:创建上传组件:生成对应的数据参数对象        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);        //第三步:设置上传文件的字符集        servletFileUpload.setHeaderEncoding("UTF-8");        formData = new HashMap<>();        servletFileUpload.setSizeMax(TOTALSIZEMAX); //设置限制总的大小        servletFileUpload.setFileSizeMax(FILESIZEMAX);  //设置限制单个文件的大小    //第四步:生成表单元素的集合    List listItems = servletFileUpload.parseRequest(request);    for (FileItem fileItem : listItems) {        //遍历表单元素的集合        if(fileItem.isFormField()){ //判断是否是表单元素的字段            String formFieldName = fileItem.getFieldName(); //字段的name名称            String formFieldValue = fileItem.getString("UTF-8"); //获取值            formData.put(formFieldName,formFieldValue);        }else{            //文件            //获取上传文件的名称            String uploadName = fileItem.getName(); //判断题.xlsx    FSDFSFDSFSDFDSFDSFDS.xlsx            //设置上传文件的路径            String contextPath = request.getServletContext().getRealPath("/");//当前项目的路径            //设置上传路径            String uploadPath = getPath(contextPath); //    /upload/2019/08/21/fdsfdsfdsfdsfds.xlsx            //设置限制上传文件的类型            String ext = uploadName.substring(uploadName.lastIndexOf("."),uploadName.length());  //.xlsx            if(ALLOWEXT.indexOf(ext) == -1){ //不能上传该类型                throw new FileUploadException("不支持此格式");            }            //上传文件的名称            String newUploadName = UUIDUtils.getUUId()+ext;            //从表单对象中将文件读取出来            InputStream inputStream = fileItem.getInputStream();            //输出流            FileOutputStream fileOutputStream = new FileOutputStream(contextPath+uploadPath+newUploadName);            byte[] by = new byte[1024];            int len;            while((len = inputStream.read(by)) != -1){                fileOutputStream.write(by,0,len);            }            //关闭输入流            inputStream.close();            //刷新输出流            fileOutputStream.flush();            fileOutputStream.close();            //存放数据库的文件路径            String saveDB = uploadPath+newUploadName;            formData.put("fileNameUrl",saveDB);        }    }            isNoUpload = true;        return isNoUpload;    }    /**     * 封装上传文件的路径     * @return     */    public static String getPath(String contextPath){            Calendar calendar = Calendar.getInstance();            //获取年            int year = calendar.get(Calendar.YEAR);            //获取月            int month  = calendar.get(Calendar.MONTH)+1;           //获取日            int day  = calendar.get(Calendar.DATE);            String uploadPath = File.separator+"upload"+File.separator+year+File.separator+month+File.separator+day+File.separator;            File file = new File(contextPath+uploadPath);            if(!file.exists()){ //判断上传的目录是否存在                //创建                file.mkdirs();            }        return  uploadPath;    }}
  1. Servlet获取上传文件的表单信息
@WebServlet("/upload.do")public class UserServlet extends HttpServlet{    @Override    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        boolean result = false;        try {            result = FileUploadUtils.uploadFile(request);            if(result){ //上传成功                Map user =  FileUploadUtils.formData;                System.out.println(user.get("userName"));                System.out.println(user.get("userPwd"));                System.out.println(user.get("fileNameUrl"));            }        } catch (FileUploadException e) {            e.printStackTrace();        }    }}

文件下载

  1. jsp使用超链接,下载准备之前上传fb4b8845778048868c4ae3df9ee2c250.png
    文件下载     commons-fileupload-1.4-bin.zip

2.Servlet中业务方法

异步上传文件

  1. 准备异步上传jsp页面,注意引入jQuery文件依赖
  1. 异步上传业务逻辑
  

需要源码,欢迎留言。如果觉得丫丫分享的还不错,请点击关注。谢谢!

d8834c429e0ab2da05129a77cb7d431c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值