JavaWeb实现文件上传功能详解
文件上传功能的实现
在大多数网站中,我们都可以看见文件上传和下载功能的实现,今天我们就文件上传做一个详细的总结
实现步骤:
1、新建一个JSP页面:表单必须设置:enctype="multipart/form-data"参数 upload.jsp:
<form action="" method="post" enctype="multipart/form-data"> <!--accept=".txt"标签用来确定上传的文件默认类型--> 请选择您要上传的文件:<input type="file" name="fileName" accept=".txt" /> <br/> 确认上传?<input type="submit" value="确认" /><input type="reset" value="重选" /> </form>
2、编写后端功能Servlet代码:
UploadFile.java:
具体实现思路:
--------1、设置编码方式为utf-8,获取字符流
--------2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象
--------3、设置文件缓存目录
--------4、加载文件缓存目录,创建ServletFileUpload对象
--------5、设置文件编码为utf-8
--------6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name
--------7、遍历表单name集合,判断哪一些是普通字段和文件字段,进行区分
--------8、得到所上传的文件路径名
--------9、截取文件名
--------10、设置上传的目标文件夹路径
--------11、通过字节流进行文件的对拷
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、设置编码方式为utf-8,获取字符流 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter write = response.getWriter(); //2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //3、设置文件缓存目录 File file = new File("C:\\Cache"); if(!file.exists()) { //如果文件不存在,就创建一个文件 file.mkdirs(); } diskFileItemFactory.setRepository(file); //加载文件缓存目录 //4、创建ServletFileUpload对象 ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //5、设置文件编码为utf-8 fileUpload.setHeaderEncoding("utf-8"); //6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name --->比如:这里只有一个name="fileName" 拿到的就是这个集合 List<FileItem> fileItems = null; try { fileItems = fileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } //8、遍历集合 for(FileItem fileItem:fileItems) { //文本域 //判断是否为普通字段 if(fileItem.isFormField()) { //得到字段名、字段值 String name = fileItem.getFieldName(); // } //为文件域 else { //9、得到所上传的文件路径名 String fileName = fileItem.getName(); //10、截取文件名 String fiString = fileName.substring(fileName.lastIndexOf("\\")+1); //11、设置上传的目标文件夹路径 File filedir = new File("C:\\NewFile"); if(!filedir.exists()) { filedir.mkdir(); } // System.out.println(user.getUserName()); File filepath = new File(filedir+"\\"+fiString); // System.out.println(fiString); if(!filepath.exists()) { filepath.createNewFile(); } //获得文件上传流 InputStream in = fileItem.getInputStream(); //使用FileOutStream打开服务器端的上传文件 FileOutputStream out = new FileOutputStream(filepath); //流的对拷 byte[] bb = new byte[1024]; int len ; while((len= in.read(bb))>0) { out.write(bb, 0, len); // out.close(); // in.close(); fileItem.delete(); //删除临时文件 } write.println("文件上传成功<br/>"); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Swagger注解-@ApiModel和@ApiModelProperty的用法
这篇文章主要介绍了Swagger注解-@ApiModel和@ApiModelProperty的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06Java的JDBC中Statement与CallableStatement对象实例
这篇文章主要介绍了Java的JDBC中Statement与CallableStatement对象实例,JDBC是Java编程中用于操作数据库的API,需要的朋友可以参考下2015-12-12Java多线程开发工具之CompletableFuture的应用详解
做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用了,本文就来聊聊它的应用吧2023-03-03IDEA 2020 无法启动的解决办法(启动崩盘)附IDEA 2020 新功能
这篇文章主要介绍了IDEA 2020 无法启动的解决办法(启动崩盘)附IDEA 2020 新功能,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-04-04
最新评论