javaWeb实现简单文件上传

 更新时间:2022年06月22日 10:35:28   作者:学以致用HT  
这篇文章主要为大家详细介绍了JAVAWeb实现简单文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了javaWeb实现简单文件上传的具体代码,供大家参考,具体内容如下

1.先导入两个包:commons-fileupload-1.3.3.jar,commons-io-2.6.jar。

2.前端页面代码

<form action="upLoadfile.do" method="post"
        enctype="multipart/form-data">
        <input type="text" name="username" /><br> 
        <input type="file" name="userimg" /><br> 
        <input type="submit" value="提交" />
</form>

2.Servlet代码

package com.uploadtest.upload;
 
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
/**
 * Servlet implementation class upLoadfile
 */
@WebServlet("/upLoadfile.do")
public class upLoadfile extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see HttpServlet#HttpServlet()
     */
    public upLoadfile() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String saveFileName = ""; //
        String oldFileName = ""; // 直接由item.getNam()获取的文件名,有可能获取的是路径,也为了避免重名覆盖,所以要对它进行处理
        String newFileName = ""; // 对源文件名进行处理后的名字
        // 借助工具解析commons-fileupload smartupload(在项目中导入了jar包)
        // 判断传递的是否是文件类型,判断form的enctype的属性值是否是multipart/form-data
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart) {
            // 创建FileItem对象的工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 获取Servlet上下文
            ServletContext servletContext = null;
            servletContext = this.getServletConfig().getServletContext();
            // 获取临时文件夹
            String str = "javax.servlet.context.tempdir";
            File repository = (File) servletContext.getAttribute(str);
            factory.setRepository(repository);
            // 创建文件上传处理器
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 解决中文乱码
            upload.setHeaderEncoding("utf-8");
            // 解析request获取上传的参数
            try {
                // 使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
                List<FileItem> items = upload.parseRequest(request);
                // 解决上传文件名的中文乱码
                upload.setHeaderEncoding("UTF-8");
                // 处理参数
                for (FileItem item : items) {
                    // 判断是否为Form的表单域,即判断是否为普通的数据,若不是则为文件。
                    if (item.isFormField()) {
                        String name = item.getFieldName();
                        // 解决普通输入项的数据的中文乱码问题
                        String value = item.getString("UTF-8");
                        // value = new String(value.getBytes("iso8859-1"),"UTF-8");
                        //System.out.println(name + "=" + value);
                    } else {
                        // 设置上传单个文件的大小的最大值,目前是设置为1024*1024*10字节,也就是10MB
                        upload.setFileSizeMax(1024 * 1024 * 10);
                        // 写入文件
                        // 此处本项目在服务器中的路径,为绝对路径,也可以根据需要存入到其他路径
                        String rootPath = servletContext.getRealPath("//");
                        // File.separator(相当于添加了一个分隔符),在Windows下的路径分隔符(\)和在Linux下的路径分隔符(/)是不一样的,当直接使用绝对路径时,跨平台会报异常                        
                        String savePath = rootPath + File.separator + "upload";
                        /*  此处我是将文件保存在服务器上的,这样的话如果重写部署一次服务器,之前上传的文件就会删除
                          如果想永久保存上传的文件,可以设置一个其他绝对路径,如:E:\eclipse-workspace\JAVAWeb\JSPUploadTest\WebContent\fileByupload。*/                         
                        // String savePath = "E:\\eclipse-workspace\\JAVAWeb\\JSPUploadTest\\fileByupload";
 
                        File fileSaveFolder = new File(savePath);
                        // 如果不存在该文件夹则创建
                        if (!fileSaveFolder.exists()) {
                            fileSaveFolder.mkdir();
                        }
                        oldFileName = item.getName();
                        newFileName = processFileName(oldFileName);
                        saveFileName = savePath + File.separator + newFileName;
                        // 存储文件
                        File uploadedFile = new File(saveFileName);
                        item.write(uploadedFile);
                    }
                }
                request.setAttribute("message", "文件上传成功!");
            } catch (FileUploadBase.FileSizeLimitExceededException e) {
                e.printStackTrace();
                request.setAttribute("message", "照片大小不能超过10M");
                request.getRequestDispatcher("Show.jsp").forward(request, response);
                return;
            } catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            request.setAttribute("saveFileName", saveFileName);
            request.setAttribute("newFileName", newFileName);
            request.getRequestDispatcher("Show.jsp").forward(request, response);
        }
    }
 
    // 对文件名进行处理
    private String processFileName(String oldFileName) {
        // 补充:对于 item.getName()有的浏览器会返回文件名,而有的浏览器会返回“路径”+“文件名”,针对后者我们需要通过“字符串截取”获取文件名
        // 例如会出现这样的情况:item.getName():C:\Users\Desktop\备忘录.txt
        String tempFileName = "";
        int index = oldFileName.lastIndexOf("\\");
        if (index != -1) {
            // subString(x)是从字符串的第x个字符截取
            tempFileName = oldFileName.substring(index + 1);
        }
        // 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
        return UUID.randomUUID().toString() + "_" + tempFileName;
    }
}

3.图片展示

<p>${message}</p>
  <img id="picture" src="upload/${newFileName}" width="200px" height="200px" alt="不是图片">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java中Serializable接口作用详解

    java中Serializable接口作用详解

    这篇文章主要为大家详细介绍了java中Serializable接口作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    本篇文章主要介绍了SpringMVC结合ajaxfileupload实现文件无刷新上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • spring aop底层原理及如何实现

    spring aop底层原理及如何实现

    这篇文章主要介绍了spring aop底层原理及如何实现,帮助大家更好的理解和学习使用spring aop,感兴趣的朋友可以了解下
    2021-04-04
  • SpringCloud Gateway动态路由配置详解

    SpringCloud Gateway动态路由配置详解

    这篇文章主要为大家介绍了SpringCloud Gateway动态路由配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Java编程实现统计一个字符串中各个字符出现次数的方法

    Java编程实现统计一个字符串中各个字符出现次数的方法

    这篇文章主要介绍了Java编程实现统计一个字符串中各个字符出现次数的方法,涉及java针对字符串的遍历、判断、运算等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • springboot整合mongodb使用详解

    springboot整合mongodb使用详解

    MongoDB是一个文档数据库(以 JSON 为数据模型),由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,本文就给大家介绍一下详细介绍一下springboot整合mongodb使用,需要的朋友可以参考下
    2023-07-07
  • SpringBoot实现邮件发送的示例代码

    SpringBoot实现邮件发送的示例代码

    电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。本文详细为大家介绍了SpringBoot实现发送电子邮件功能的示例代码,需要的可以参考一下
    2022-04-04
  • IDEA的Mybatis Generator驼峰配置问题

    IDEA的Mybatis Generator驼峰配置问题

    这篇文章主要介绍了IDEA的Mybatis Generator驼峰配置问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 详解Java多线程tryLock()方法使用

    详解Java多线程tryLock()方法使用

    本文主要介绍了Java多线程tryLock()方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • mybatis中<if>标签bool值类型为false判断方法

    mybatis中<if>标签bool值类型为false判断方法

    这篇文章主要给大家介绍了关于mybatis中<if>标签bool值类型为false判断方法,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论