java web文件上传 基于commons-fileupload-1.3.1.jar

上传文件的方法有很多种,我现在做的项目是使用Apache的fileupload。

首先我们需要commons-fileupload-1.3.1.jar的包。 maven在pom.xml导入,普通web项目放在WEB-INF的lib目录下

然后 commons-fileupload.jar 依赖于commons-io.jar,所以同理加入commons-fileupload.jar

 

下面是代码。 用的是spring mvc,功能在controller里实现 

重新写了一遍注释,代码应该能看的很清楚了

/*
 * 接收上传的文件,返回文件地址
 */
 //url 地址
@RequestMapping("/uploadify")
public void uploadFile(HttpServletRequest request, HttpServletResponse response, HttpSession session)
        throws Exception {

    String type = request.getParameter("type");
    String ret_fileName = null;// 返回给前端已修改的图片名称

    // 临时文件路径
    String dirTemp = "/static/upload/temp";
    
    //图片存储相对路径
    String suitelogo = "";
    
    //设置图片存储相对路径
    //这里的type是前台传过来方便辨认是什么图片的参数,没有需要就不用判断
    if ("app".equals(type)) {
        suitelogo = "/static/upload/applogo";
    } else if ("suite".equals(type)) {
        suitelogo = "/static/upload/suitelogo";
    } else {
        suitelogo = dirTemp;
    }
    
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();

    // 获取当前项目的根目录  tomcat的绝对路径/webapps/项目名
    String realPath = session.getServletContext().getRealPath("");
    
    
    //获取tomcat下的ROOT目录,通过root绝对路径和存储图片文件夹的相对路径创建目录 
    //mkdirs方法逐级创建目录。 mkdir只创建最后一级目录,前面目录不存在则不创建
    File realFile = new File(realPath);
    
    String rootPath = realFile.getParent() + "/ROOT";
    String normPath = rootPath + suitelogo;
    String tempPath = rootPath + dirTemp;

    File f = new File(normPath);
    File f1 = new File(tempPath);
    System.out.println(normPath);
    if (!f.exists()) {
        f.mkdirs();
    }

    if (!f1.exists()) {
        f1.mkdirs();
    }

    
    //创建文件解析对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    
    //设定使用内存超过5M时,将产生临时文件并存储于临时目录中 
    factory.setSizeThreshold(5 * 1024 * 1024); 
    
    // 设定存储临时文件的目录
    factory.setRepository(new File(tempPath)); 

    //创建上传文件实例
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setHeaderEncoding("UTF-8");

    try {
        //解析request 成FileItem 因为支持多个文件上传,所以用list
        List<?> items = upload.parseRequest(request);
        Iterator<?> itr = items.iterator();

        while (itr.hasNext()) {
            
            //获取文件名
            FileItem item = (FileItem) itr.next();
            String fileName = item.getName();
            if (fileName != null) {
                fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
                fileName = getUUID() + fileName;
                ret_fileName = normPath + "/"+fileName;
            }
            
            //如果不是普通表单,则是文件上传表单,取二进制流写入本地
            if (!item.isFormField()) {

                try {
                    File uploadedFile = new File(normPath + "/" + fileName);
                    OutputStream os = new FileOutputStream(uploadedFile);
                    InputStream is = item.getInputStream();
                    byte buf[] = new byte[1024];// 可以修改 1024 以提高读取速度
                    int length = 0;
                    while ((length = is.read(buf)) > 0) {
                        os.write(buf, 0, length);
                    }
                    // 关闭流
                    os.flush();
                    os.close();
                    is.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    } catch (FileUploadException e) {
        e.printStackTrace();
    }
    // 将已修改的图片名称返回前台
    out.print(ret_fileName);
    out.flush();
    out.close();
}

//生成随机数字,防止文件重名
private String getUUID() {
    return UUID.randomUUID().toString();
}

 流程主要几个步骤

1.创建文件解析对象DiskFileItemFactory factory = new DiskFileItemFactory();

2.创建上传文件实例ServletFileUpload upload = new ServletFileUpload(factory);

3获取上传的文件明,并把文件存入本地

转载于:https://www.cnblogs.com/Frank-zsx/p/5783505.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: commons-fileupload-1.4.jar 是一个 Java 库,用于处理文件上传功能。它提供了一组 API,可以方便地将文件上传到服务器端,并对上传的文件进行处理和管理。这个库可以被广泛地应用于 Web 应用程序中,例如上传图片、上传文件等功能。 ### 回答2: commons-fileupload-1.4.jar是一个Java开源库,用于帮助开发者处理文件上传的功能。它提供了一些方便的方法和类,使开发者能够轻松地处理文件上传的细节和逻辑。 commons-fileupload-1.4.jar具有以下特点和功能: 1. 上传文件的大小限制:开发者可以通过设置最大文件大小的限制,确保上传的文件不会超过设定的大小。这对于避免服务器负荷过大和防止恶意上传非常有用。 2. 文件上传进度监控:commons-fileupload-1.4.jar允许开发者监控文件上传的进度,从而在前端页面上显示上传的进度条或百分比。这有助于提升用户体验和提供实时的反馈。 3. 多文件上传支持:库中提供了上传多个文件的方法,使得同时上传多个文件变得简单。这对于需要批量上传文件的功能非常有用。 4. 文件上传的错误处理:开发者可以通过捕获异常和处理错误,来应对上传文件过程中的各种问题,比如文件格式错误、文件大小超过限制等。 5. 高性能和稳定性:commons-fileupload-1.4.jar经过了多次更新和改进,它是经过充分测试和广泛应用的稳定版本。这保证了它的高性能和可靠性,可以满足大多数文件上传的需求。 总而言之,commons-fileupload-1.4.jar是一个功能强大的文件上传处理库,使得开发者能够快速、方便地实现文件上传功能。它具有高性能和稳定性,提供了丰富的功能和错误处理机制。无论是在Web开发或其他领域中,它都是一个非常实用的工具。 ### 回答3: commons-fileupload-1.4.jar是一个Java库,用于处理文件上传功能。它是Apache Commons项目的一部分,旨在简化开发人员在Web应用程序中处理文件上传的任务。 该库提供了一个简单而强大的API,可以轻松地将用户通过Web表单上传的文件保存到服务器上的指定位置。它支持处理单个文件上传以及多个文件上传,并提供了对文件上传进度的监控和管理的功能。 commons-fileupload-1.4.jar还提供了一些方便的类和方法,用于解析传入的请求,从中提取上传的文件信息,并对文件进行处理。它支持多种文件上传的特性,如限制文件大小、限制文件类型、自动清理临时文件等。 使用commons-fileupload-1.4.jar非常简单。首先,将该库添加到项目的构建路径中。然后,通过创建一个DiskFileItemFactory对象来配置文件上传的一些参数,例如临时文件存储路径、内存阈值等。接下来,创建一个ServletFileUpload对象,并使用它解析请求,得到文件项的列表。最后,遍历文件项列表,将每个文件保存到服务器上的指定位置。 总之,commons-fileupload-1.4.jar提供了一个方便、高效的解决方案,用于处理文件上传功能。无论是小型网站还是大型Web应用程序,它都是一个非常有用的工具,可以帮助开发人员轻松处理文件上传的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值