JSP实现文件上传功能

 更新时间:2021-09-22 22:10:35   作者:佚名   我要评论(0)

本文实例为大家分享了JSP实现文件上传功能的具体代码,供大家参考,具体内容如下
一、准备部分
需要fileupload.jar与io.jar包共同完成。构建

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

一、准备部分

需要fileupload.jar与io.jar包共同完成。构建完成路径后可继续。

资源地址

二、页面部分

<form action="UploadServlet" method="post" enctype="multipart/form-data">
 学号:<input type="text" name="sno"/><br/>
 姓名:<input type="text" name="sname"/><br/>
 上传照片:<input type="file" name="spicture"/><br/>
 <input type="submit" value="注册"/>
</form>

注意:

1.文件上传必须要使用post,以避免用get方法时传输总量超过搜索框所能承载最大字符数。

2.必须加入enctype="multipart.form-data"字段

3.文件处需用“file”

三、Servlet部分

package webtest;
 
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
 
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.FileItemFactory;
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 UploadServlet
 */
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");// 请求编码处理,传输时
  response.setCharacterEncoding("utf-8");// 响应编码处理,传输时
  response.setContentType("utf-8");// 响应编码处理,显示时
  boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 判断是否有entype="multipart/form-data"部分
  if (isMultipart) {
   try {
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    
    //设置上传时的内存缓冲区大小,超出时写入临时文件  10kb
    ((DiskFileItemFactory) factory).setSizeThreshold(10240);//单位byte
    //设置临时文件目录,防止系统空间不足
    ((DiskFileItemFactory) factory).setRepository(new File(request.getSession().getServletContext().getRealPath("Uploadtemp")));//动态获取Uploadtemp文件夹位于该项目中的位置
    //控制上传单个文件的最大值 20kb
    upload.setSizeMax(20480);//单位byte
    
    List<FileItem> items = upload.parseRequest(request);// 解析form中的所有请求字段,并保存在item中
    Iterator<FileItem> iter = items.iterator();
 
    while (iter.hasNext()) {
     // 解析时无顺序,因此需根据名字查找
     FileItem item = iter.next();
     if (item.isFormField()) {//非文件数据
      String itemName = item.getFieldName();//获取非文件的范围数据名
      if (itemName.equals("sno")) {
       int sno = -1;
       sno = Integer.parseInt(item.getString("utf-8"));
      }
      else if (itemName.equals("sname")) {
       String sname = null; 
       sname = item.getString("utf-8");
 
      } 
      else {
       System.out.println("其他字段...");
      }
 
     } else {//文件上传
      String fileName = item.getName();//获取文件范围数据。路径及其名称
      //判断文件类型
      String ext = fileName.substring(fileName.indexOf(".")+1);
      if(!(ext.equals("png")||ext.equals("gif")||ext.equals("jpg"))) {
       System.out.println("仅支持png.gif,jpg类型文件");
       return ;
      }
      String path = request.getSession().getServletContext().getRealPath("Upload");//动态获取Upload文件夹位于该项目中的位置
      File file = new File(path,fileName);
      item.write(file);//定义上传路径,多为服务器路径
      System.out.println(fileName+"上传成功");
     }
     item.delete();//删除临时目录的文件
    }
   } 
   catch(FileUploadBase.SizeLimitExceededException e) {
    System.out.println("最大20KB");
   }
   catch (FileUploadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } 
   catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }
 
}

注:

1.若该处标红且鼠标悬停后未找到包,则可以使用"alt"+"/"组合键选择下图第一个类来导入。

 

2.由于若Upload与Uploadtemp文件存放于tomcat对应的项目下,每一次通过eclipse更新代码,会将eclipse下代码直接覆盖,因而两个文件夹会直接被覆盖掉。可以在eclipse中新建,或通过绝对/相对路径于其他文件夹中来设置。

3.临时文件中的数据会保留很短的时间,添加sleep让程序休眠也许可以看到。即使无item.delete(),在整个会话完成后,临时文件也会被删除。

4.若报错无法找到文件,请尝试用浏览器若谷歌进行操作,而不是用Eclipse自带的。

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

您可能感兴趣的文章:
  • Jsp页面实现文件上传下载类代码
  • jsp中点击图片弹出文件上传界面及预览功能的实现
  • jsp实现文件上传下载的程序示例
  • Jsp+Servlet实现文件上传下载 文件上传(一)
  • AJAX和JSP实现的基于WEB的文件上传的进度控制代码
  • jsp文件上传与下载实例代码
  • jsp中点击图片弹出文件上传界面及实现预览实例详解
  • 利用jsp+Extjs实现动态显示文件上传进度
  • jsp 文件上传浏览,支持ie6,ie7,ie8
  • servlet+JSP+mysql实现文件上传的方法

相关文章

  • JSP实现文件上传功能

    JSP实现文件上传功能

    本文实例为大家分享了JSP实现文件上传功能的具体代码,供大家参考,具体内容如下 一、准备部分 需要fileupload.jar与io.jar包共同完成。构建
    2021-09-22
  • 关于JSP用户登录连接数据库详情

    关于JSP用户登录连接数据库详情

    目录关于JSP用户登录连接数据库详情1、首先创建po类 2、创建底层UserDao3、创建UserService(一般都会调用UserDao) 4、写web层UserSrevlet
    2021-09-22
  • PHP之mysql位运算案例讲解

    PHP之mysql位运算案例讲解

    位运算,赋值状态时异或对应位数1的整形,判断状态则与运算对应位数1的整形。最大用处就是同时判断32位状态,节省存储空间,便于扩展, &#16
    2021-09-22
  • PHP之使用swoole统计在线人数和ID案例讲解

    PHP之使用swoole统计在线人数和ID案例讲解

    $server->connections // s e r v
    2021-09-22
  • php之使用docker运行workerman案例讲解

    php之使用docker运行workerman案例讲解

    介绍 在docker上部署gatawayWorker项目,项目中使用到mysql,redis 安装 mysql 拉取镜像 docker pull mysql:5.7 运行容器 docker run -
    2021-09-22
  • php之redis短线重连案例讲解

    php之redis短线重连案例讲解

    php redis断线重连,pconnect连接失败问题 介绍 在swoole ,workerman等cli长连接模式下,遇到Redis异常断开,后面又开启的情况,一般得重新启
    2021-09-22
  • Laravel实现登录跳转功能

    Laravel实现登录跳转功能

    前言 登录跳转: 不同的用户在登录成功之后跳转到不同的网页当中 例如:网站管理员登录成功后跳转到网站后台,vip用户登录成功后跳转到vip
    2021-09-22
  • PHP格式化显示时间date()函数案例讲解

    PHP格式化显示时间date()函数案例讲解

    date("yyyyMMdd",time())&#160; date() 函数   功能:用于格式化时间,返回一个字符串。&#160; 语法:string date( string format [, i
    2021-09-22
  • php中重定向网页跳转方法总结案例教程

    php中重定向网页跳转方法总结案例教程

    PHP中重定向网页跳转页面的方法(共三种) 第一种:利用header()函数进行重定向,这也是我用的较多的。(注意!locationhe和“:”之间不能有
    2021-09-22
  • PHP之CI框架学习讲解

    PHP之CI框架学习讲解

    一、前言 CodeIgniter 是一个简单快速的PHP MVC框架。EllisLab 的工作人员发布了 CodeIgniter。CodeIgniter 是一套小巧但功能强大的、给 PHP
    2021-09-22

最新评论