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();
        }

    }

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

jspSmartUpload组件可以从www.jspsmart.com网站上下载,名字是jspSmartUpload.zip。下载后,用WinRAR将其解压到Tomcat的webapps目录下。将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF,因为Tomcat对文件名大小写敏感,它要求Web应用程序相关的类所在目录为WEB-INF,且必须是大写。接着重新启动Tomcat,这样就可以在JSP文件中使用jspSmartUpload组件了<br>  按上述方法安装后,只有webapps/jspsmartupload目录下的程序可以使用jspSmartUpload组件,如果想让Tomcat服务器的所有Web应用程序都能用它,必须做如下工作<br>1.进入命令行状态,将目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下<br>2.运行JAR打包命令:jar cvf jspSmartUpload.jar com<br>(也可以打开资源管理器,切换到当前目录,用WinZip将com目录下的所有文件压缩成jspSmartUpload.zip,然后将jspSmartUpload.zip换名为jspSmartUpload.jar文件即可。)<br>3.将jspSmartUpload.jar拷贝到Tomcat的shared/lib目录下。<br>二、相关类说明篇<br>㈠ File类<br>这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息<br>File类主要提供以下方法<br>1、saveAs作用:将文件换名另存<br>原型<br>public void saveAs(java.lang.String destFilePathName)<br>或<br>public void saveAs(java.lang.String destFilePathName, int optionSaveAs) <br>其中,destFilePathName是另存的文件名,optionSaveAs是另存的选项,该选项有三个值,分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系统的根目录为文件根目录另存文件,SAVEAS_VIRTUAL表明以Web应用程序的根目录为文件根目录另存文件,SAVEAS_AUTO则表示让组件决定,当Web应用程序的根目录存在另存文件的目录时,它会选择SAVEAS_VIRTUAL,否则会选择SAVEAS_PHYSICAL<br>例如,saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘,则另存的文件名实际是c:\upload\sample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用程序的根目录是webapps/jspsmartupload,则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用程序根目录下存在upload目录,则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL),否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)<br>建议:对于Web程序的开发来说,最好使用SAVEAS_VIRTUAL,以便移植<br>^^^^^^^^^^^^^^^^^^^^^^…………………………………………………………………………………………………………………………………………………………………………<br>略
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值