jsp+servlet简单实现上传文件功能(保存目录改进)

1、jsp前端

<%--
 Created by IntelliJ IDEA.
 User: Lenovo
 Date: 2020/6/19
 Time: 22:53
 Learn from https://www.bilibili.com/video/BV18z411i7gh?t=23&p=192
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>文件上传</title>
</head>
<body>
  <!--文件上传对表单的要求-->
  <!--
    1、表单中的请求提交方式必须是POST
    2、表单中应指定所提交的请求位multipart请求,通过在<form/>标签中添加enctype属性
      其值为multipart/form-data
    3、 表单
  -->
  <form method="POST" action="http://localhost:8888/hello/UploadImageServlet" enctype="multipart/form-data">
    编号<input type="text" name="BNO"></br>
    名字<input type="text" name="BNAME"></br>
    照片<input type="file" name="picutreUrl"></br>
    <input type="submit" value="注册">
  </form>
</body>
</html>

2、servlet后台

package Servlet.bookServlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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 java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@WebServlet(name = "UploadImageServlet")
public class UploadImageServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request,response);
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1、判断请求是不是multipart请求
    if(!ServletFileUpload.isMultipartContent(request)){
      throw new RuntimeException("当前请求不支持文件上传");
    }
    System.out.println("开始上传文件");
    //2、创建FileItem工厂==>文件写入硬盘的作用
    try {
      DiskFileItemFactory factory = new DiskFileItemFactory();
      //3、创建temp临时文件夹
      String tempPath ="D:\\tomcat\\apache-tomcat-9.0.35-windows-x64\\apache-tomcat-9.0.35\\webapps\\librarySystem\\web\\net\\temp";
      File tempFile = new File(tempPath);
      factory.setRepository(tempFile);
      //4、设置使用临时文件的边界值,大于该值,上传文件先保存在临时文件中,小于该值,则直接写入内存
      //单位是字节
      factory.setSizeThreshold(1024*1024*1);

      //5、创建文件上传核心组件
      // 调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
      ServletFileUpload upload = new ServletFileUpload(factory);
      upload.setHeaderEncoding("utf-8");//可以解决文件名中文乱码
      upload.setFileSizeMax(1024*1024*2);

      String bNo="defaultBNo",bName="defaultBName";
      //6、解析请求
      List<FileItem> items =upload.parseRequest(request);
      //7、遍历请求
      for(FileItem item:items){
        //普通表单项,上传名字,编号等普通信息的上i传
        if(item.isFormField()){
          String fileName = item.getFieldName();// name属性值
          String fileValue = item.getString("utf-8");// name对应的value值
          System.out.println(fileName + " -- " + fileValue);
          if(fileName.equalsIgnoreCase("BNO")){
            bNo = fileValue;
          }
          if(fileName.equalsIgnoreCase("BNAME")){
            bName = fileValue;
          }
         }
        else{//上传图片等
          String fileName = item.getName();
          System.out.println("上传文件名字:"+fileName);
          String suffix = fileName.substring(fileName.lastIndexOf('.'));//获取文件类型
          String newFileName = bNo+"_"+bName+suffix;
          System.out.println(newFileName);
          //获取输入流,其中有上传文件的内容
          InputStream is = item.getInputStream();
          //String path = this.getServletContext().getRealPath("/net/bookImage");//获得当前项目保存服务器地址,也就是web文件夹下
          String path ="D:\\tomcat\\apache-tomcat-9.0.35-windows-x64\\apache-tomcat-9.0.35\\webapps\\librarySystem\\web\\net\\bookImage";
          //文件夹内文件数目有上限,但是可以创建子目录
            //获取当前系统时间
            Calendar now = Calendar.getInstance();
            int year = now.get(Calendar.YEAR);
            int month = now.get(Calendar.MONTH)+1;
            int day = now.get(Calendar.DAY_OF_MONTH);
            path = path+"/"+year+"/"+month+"/"+day;
            //若该目录不存在,直接创建新目录
            File dirFile = new File(path);
            if(!dirFile.exists()){
              dirFile.mkdirs();
            }
          //创建目标文件,用来保存上传文件
          File desFile = new File(path,newFileName);
          //创建文件输出流
          OutputStream os = new FileOutputStream(desFile);
          //将输入流数据写入到输出流中
          int len=-1;
          byte[]buf = new byte[1024];
          while((len=is.read(buf))!=-1){
            os.write(buf,0,len);
          }
          //desFile.delete();//删除临时文件
          os.close();//输出流
          is.close();//输入流
          //删除临时文件
          item.delete();
        }
      }
    } catch (FileUploadException e) {
      e.printStackTrace();
    }
  }
}

总结

到此这篇关于jsp+servlet简单实现上传文件(保存目录改进)的文章就介绍到这了,更多相关jsp servlet实现上传文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • jsp+servlet实现文件上传与下载功能

    本文实例为大家分享了jsp servlet实现文件上传与下载的具体代码,供大家参考,具体内容如下 上传: 需要导入两个包:commons-fileupload-1.2.1.jar,commons-io-1.4.jar import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.Http

  • Jsp+Servlet实现文件上传下载 文件列表展示(二)

    接着上一篇讲: Jsp+Servlet实现文件上传下载(一)--文件上传 本章来实现一下上传文件列表展示,同时优化了一下第一章中的代码. 废话少说,上代码 mysql创建附件表 DROP TABLE tbl_accessory; CREATE TABLE tbl_accessory ( id INT AUTO_INCREMENT PRIMARY KEY, file_name VARCHAR(500), file_size DOUBLE(10,2), file_ext_name VARCHAR(1

  • JSP servlet实现文件上传下载和删除

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 由于存储空间,对一般用户而言,就是用来操作存储文件的,所以这两天,特意看了一下windows下用servlet实现文件上传.下载和删除,下面是详细代码说明 上传: 用的是commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar组件,可以去apache官网上去下载,然后放到WebRoot/WEB-INF/lib目录下 upload.html <html> <hea

  • servlet+JSP+mysql实现文件上传的方法

    本文实例讲述了servlet+JSP+mysql实现文件上传的方法.分享给大家供大家参考,具体如下: 一.文件上传的基本操作: 1. 表单属性enctype的设置 multipart/form-data和application/x-www-form-urlencoded的区别 FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是"application/x-www-form-urlencoded". 然而,在向服务器发送大量的文本.包含非ASCI

  • Servlet+Jsp实现图片或文件的上传功能具体思路及代码

    现在不管是博客论坛还是企业办公,都离不开资源的共享.通过文件上传的方式,与大家同分享,从而达到大众间广泛的沟通和交流,我们既可以从中获得更多的知识和经验,也能通过他人的反馈达到自我改进和提升的目的. 下面我就为大家介绍 web项目中的这一上传功能,那么文件是如何从本地发送到服务器的呢?看我慢慢道来: 首先,我们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,这样当我们将该工程部署到服务器上时,服务器便也生成个upload文件夹,用来存放上传的资源. 然后,在Web

  • Jsp+Servlet实现文件上传下载 文件上传(一)

    文件上传和下载功能是Java Web必备技能,很实用. 本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料以及自己的尝试,先写第一篇文件上传.后续会逐步实现下载,展示文件列表,上传信息持久化等. 废话少说,直接上代码 第一步,引用jar包,设置上传目录 commons-fileupload-1.3.1.jar commons-io-2.4.jar 上传目录:WEB-INF/tempFiles和WEB-INF

  • Jsp+Servlet实现文件上传下载 删除上传文件(三)

    接着上一篇讲:Jsp+Servlet实现文件上传下载(二)--文件列表展示 本章来实现一下删除已上传文件,同时优化了一下第一章中的代码. 废话少说,上代码得意 1.调整列表页面list.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/j

  • jsp+servlet简单实现上传文件功能(保存目录改进)

    1.jsp前端 <%-- Created by IntelliJ IDEA. User: Lenovo Date: 2020/6/19 Time: 22:53 Learn from https://www.bilibili.com/video/BV18z411i7gh?t=23&p=192 To change this template use File | Settings | File Templates. --%> <%@ page contentType="te

  • JavaWeb实现简单上传文件功能

    本文实例为大家分享了JavaWeb实现上传文件功能的具体代码,供大家参考,具体内容如下 基本思想:网站服务器的内部除了有Web应用,还有文件系统,客户端向网站上传文件就是将文件以流的形式传输给了服务器,如图所示: 注意事项: 1.为保证服务器的安全,上传的文件路径应放在外界不能直接访问的目录下,比如WEB-INF目录下.2.因为服务器的文件系统大小有限,上传的文件大小必须要有限制.3.为防止因为文件名重复而导致文件覆盖,应当给上传的文件夹生成唯一的标识,比如时间戳.UUID或者md5加密.4.可

  • 简单实现php上传文件功能

    本文实例为大家分享了php上传文件功能的具体代码,供大家参考,具体内容如下 html: <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> <input type="file" name="fil

  • 简单实现js上传文件功能

    本文实例为大家分享了js实现上传文件功能的具体代码,供大家参考,具体内容如下 一.用input完成上传,效果图如 选择文件后,提交后出现图片url 二.传输格式采用form-data形式. html代码 <form id="upload" enctype="multipart/form-data" method="post"> <input type="file" name="file"

  • 使用WebUploader实现分片断点上传文件功能(二)

    写在前面: 这几天,有去研究一下WebUploader上传文件,前面的博客有记录下使用WebUploader简单上传文件的例子,今天就把分片断点上传的例子也记录下吧,在博客园中,也查看了一些资料,基本上后台处理数据都是用的Servlet,或者是SpringMVC,由于最近的项目一直都是Struts2,所以这里就用Struts2中的action来对数据进行处理,达到分片上传文件的效果. 1.什么是分片上传? 顾名思义,就是把文件分成一片片,即让一个文件,分割成好几个小文件,然后再上传.这样做的好处

  • 使用WebUploader实现上传文件功能(一)

    写在前面: 文件上传方式很多的,对于大文件的上传,在本次项目中也有涉及,主要是用了分片断点上传大文件.所以就去了解了一下WebUploader,先从简单的上传文件开始吧. 在代码中写注释,这样看的比较好点,那就直接上代码来看了解实现的过程吧. 前台jsp页面: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String scheme = request.ge

  • 聊聊在Servlet中怎么上传文件

    首先对Servlet上传文件的简单理解 此前,Servlet本身没有对文件上传提供直接的支持,一般需要使用第三方框架来实现,这样就比较麻烦 不过,Servlet3.0之后提供了这个功能,而且使用非常简单,,为此,HTTPServletRequest提供了两个方法用于从请求中解析出上传的文件: Part getPart(String name) //获取请求中给定 name 的文件 Collection<Part> getParts() //获取所有的文件 其中每一个文件用一个javax.ser

  • hadoop上传文件功能实例代码

    hdfs上的文件是手动执行命令从本地linux上传至hdfs的.在真实的运行环境中,我们不可能每次手动执行命令上传的,这样太过繁琐.那么,我们可以使用hdfs提供的Java api实现文件上传至hdfs,或者直接从ftp上传至hdfs. 然而,需要说明一点,之前笔者是要运行MR,都需要每次手动执行yarn jar,在实际的环境中也不可能每次手动执行.像我们公司是使用了索答的调度平台/任务监控平台,可以定时的以工作流执行我们的程序,包括普通java程序和MR.其实,这个调度平台就是使用了quart

  • 使用Spring Boot上传文件功能

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>

  • PHP实现通过CURL上传文件功能示例

    本文实例讲述了PHP实现通过CURL上传文件功能.分享给大家供大家参考,具体如下: PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以"@"开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应的上传文件信息. 下面我们以一个例子来展示这个过程. 假设本地有一个文本文件log.txt,其路径为"/www/test/log.txt",内容如下: this

随机推荐