javaWeb上传文件(一)——使用jspSmartUpload

众所周和,java在做web项目开发时,经常用到文件上传功能,如果上传用户头像,照片,上传word文件等。那么今天我们就一起来探索一下java实现文件上传的第一种方式:

首先看一下上传input的写法:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
    <form action="upload" method="post"  enctype="multipart/form-data">
        <input type="file" name="name1" size="20" maxlength="80"> 
        <input type="submit" value="上传">
    </form>
</body>
</html>

注意一下几点:
1. 表单提交方式必须为post
2. input类型为File
3. input 必须含有name属性
4. 表单必须含有:enctype=”multipart/form-data” 。

一、使用JspSmartUpload组件上传

jspSmartUp组件是一种早期流行的使用框架,适合于上传小型的文件,具有灵活性简单高效。
使用方法很简单,大致流程如下:

  1. 导入jar包
  2. 组件配置初始化
  3. 设置上传大小等限制条件
  4. 获取上传文件的个数及其属性
  5. 保存

常用类及方法:
1. SmartUpload类

getFiles: 获取上传的所有文件
getRequest: 获得上传表单的其他表单项的值
setMaxFileSize : 设置上传文件的单个大小限制

2.File类

isMissing :用于判断是否选择了文件,即对应表单项是否有值
getFiledName : 获取HTML表单项的名字
getFileName : 获取上传文件的文件名
getFilePathName:获取文件全名
getSize:获取文件长度
saveAs:将文件换名存储

3.Files类

getCount :获取上传文件的个数
getSize:获取上传文件的总长度
getFile:按Index得到File对象

直接上代码:


import java.io.IOException;
import java.io.PrintWriter;

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 com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public UploadServlet() {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        SmartUpload upload = new SmartUpload();//创建组件对象
        upload.initialize(this.getServletConfig(), request, response);// 初始化
        upload.setMaxFileSize(1 * 1024 * 1024);// 每个文件最大1M
        upload.setTotalMaxFileSize(10 * 1024 * 1024);// 总共最大10M
        upload.setAllowedFilesList("jpg,png");// 允许上传jpg,png
        try {
            upload.upload();
            Files uploadFiles = upload.getFiles();
            String fileName = uploadFiles.getFile(0).getFileName();

            System.out.println("上传数量: " + uploadFiles.getCount());
            uploadFiles.getFile(0).saveAs("/upload/"+fileName, File.SAVEAS_PHYSICAL);//将文件保存在磁盘根目录下的upload文件夹
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }

    }

}
二、保存路径的问题

我们使用的是换名存储,即将上传的文件改为我们自己取的名字后保存。
这里使用的是File类的saveAs方法,其使用方式如下:

  1. saveAs(String destFilePathName)
  2. saveAs(String destFilePathName,int optionSaveAs)

optionSaveAs有三种取值:SAVEAS_AUTO、SAVEAS_VIRTUAL、SAVEAS_PHYSICAL。均为File类的静态字段(整数对应0、1、2)

分别说明:

SAVEAS_VIRTUAL

以Web应用的根目录为文件根目录,然后加上destFilePathName参数指定的路径来保存文件
如saveAs(”/upload/1.jpg”,1),则1.jpg将保存在 D:\Tomcat 8.5\webapps\FileUpDown\upload\1.jpg 如果upload文件夹不存在,将抛出This path does not exist (1135) 异常

SAVEAS_PHYSICAL

以Web服务器的安装路径中的磁盘根目录为文件根目录,加上destFilePathName参数指定的路径来保存文件
如saveAs(”/upload/1.jpg”,2),则1.jpg将保存在 D:\upload\FileUpDown\upload\1.jpg
如果D盘与根目录下的upload文件夹都不存在,则抛出This path does not exist (1135) 异常
如果D盘不存在,而根目录存在upload,则抛出The path is not a physical path 异常

SAVEAS_AUTO

则首先以SAVEAS_VIRTUAL方式来保存文件,若Web应用下由destFilePathName参数指定的路径不存在,则以SAVEAS_PHYSICAL方式保存文件

运行结果:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

如果要同时长传多张:则表单需要设置multiple=”multiple”

<form action="upload" method="post"  enctype="multipart/form-data">
        <input type="file" name="name1" multiple="multiple" > 
        <input type="submit" value="上传">
    </form>

另外在servlet中也需要遍历多张

protected void doPost(HttpServletRequest request, HttpServletResponseresponse)
            throws ServletException, IOException {
        SmartUpload upload = new SmartUpload();// 创建组件对象
        upload.initialize(this.getServletConfig(), request, response);// 初始化
        upload.setMaxFileSize(1 * 1024 * 1024);// 每个文件最大1M
        upload.setTotalMaxFileSize(10 * 1024 * 1024);// 总共最大10M
        upload.setAllowedFilesList("jpg,png");// 允许上传jpg,png
        try {
            upload.upload();
            Files uploadFiles = upload.getFiles();
            System.out.println("上传数量: " + uploadFiles.getCount());
            for(int i=0;i<uploadFiles.getCount();i++){
                String fileName = uploadFiles.getFile(i).getFileName();
                uploadFiles.getFile(i).saveAs("/upload/" + fileName, File.SAVEAS_PHYSICAL);// 将文件保存在磁盘根目录下的upload文件夹
            }
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }

    }

运行结果
这里写图片描述
这里写图片描述
这里写图片描述

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页