在导入了SmartUpload组件的前提下,一般的上传文件的代码为:
//1.实例化SmartUpload类对象
SmartUpload smart = new SmartUpload();
//2.初始化上传环境
smart.initialize(config, request, response);
//3.接收所有上传的数据
smart.upload();
//4.文件保存
smart.save("/save");
使用save()方法保存上传文件的时候会使用文件的原始名称进行保存,如果重复上传相同名字的文件的话,这样一来就有可能发生文件覆盖的情况。所以在任何的上传过程之中,绝对不会直接使用文件的原始名称进行保存,所以需要针对于上传的文件重命名;
在java.util包里面提供有一个UUID的类,这个类就是根据时间戳生成一个几乎不重复的名称;如:String fileName = UUID.randomUUID()
如果只存在文件的名称还不足以进行开发操作,还需要知道文件的后缀名;这些信息可通过SmartUpload取得;这个类定义有如下的方法:
- 取得上传文件的个数:public int getCount();
getSize()方法可以判断文件是否有文件上传。如果有上传,返回的数据是大于0; - 取得上传文件的大小:public long getSize();
- 根据索引取得每一个上传文件:public SmartFile getFile(int index);
取得的SmartFile表示每一个上传文件,即每一个上传文件的信息都在这个对象保存了。
取得上传文件的MIME类型:public String getContentType();
取得上传文件的大小:public int getSize();
取得文件的扩展名:public String getFileExt(); - 在SmartFile类里面有一个文件保存的功能:public void saveAs(String Path)
页面的简单代码如下:
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta charset="utf-8">
</head>
<body>
<form action="MyJsp.jsp" method="post" enctype="multipart/form-data">
选择照片:<input type="file" name="pic"><br>
选择照片:<input type="file" name="pic"><br>
选择照片:<input type="file" name="pic"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.jspsmart.upload.*" %>
<html>
<head>
<title>上传</title>
</head>
<%
//1.实例化SmartUpload类对象
SmartUpload smart = new SmartUpload();
//2.初始化上传环境
smart.initialize(config, request, response);
//3.接收所有上传的数据,数据都保存在smart对象
smart.upload();
//4.保存上传文件
if(smart.getFiles().getSize() >0){//有内容时才上传
for(int x=0; x<smart.getFiles().getCount();x++){
if(smart.getFiles().getFile(x).getSize() >0){//再判断一下,只保存图片类型;
String fileName = UUID.randomUUID()+"."+smart.getFiles().getFile(x).getFileExt();//重命名并判断文件类型
String filePath = getServletContext().getRealPath("/save")+fileName;
smart.getFiles().getFile(x).saveAs(filePath);//保存文件上传信息
}
}
}
%>
</html>
多个文件与保存单个文件没多大差别,前面三句不变,从保存开始。保存的时候需要注意一下文件类保存型等等
结果如图:
如果只上传一个文件的话,则不需要for循环等等,可以直接通过index(0)来处理即可。