一个简单的SmartUpload示例
使用SmartUpload使得文件上传异常简单,但同时有个问题,SmartUpload不支持本地文件校验,即不管目录是否存在,都会上传成功,如果给定目录不存在,SmartUpload在保存时,会创建一个新的文件(文件名即为给定路径的最后一个路径分隔符开始的字符串),这非常糟糕。
以下是SmartUpload上传的示例代码。
package com.zwh.smartupload;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
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;
public class UploadServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//创建SmartUpload对象
SmartUpload myupload = new SmartUpload();
try {
// 使用ServletConfig初始化SmartUpload对象
myupload.initialize(this.getServletConfig(),req,resp);
// 值得注意的是,如果设置了上传文件类型,如果上传的文件中有不允许的类型,SmartUpload会抛出异常
// 设置允许上传的文件类型,格式:"jpg,jpeg,gif"
myupload.setAllowedFilesList("");
// 设置不允许上传的文件类型,格式:"exe,bat"
myupload.setDeniedFilesList("");
// 上传
myupload.upload();
// 使用SmartUpload上传时,必须从SmartUpload对象中获取的Request才能取得其它非文件类组件的值
String newFileName = myupload.getRequest().getParameter("newFileName");
String newDirectory = "d:\\";
// 获取上传的文件列表对象
Files files = myupload.getFiles();
int size = files.getCount();
// 循环得到每个文件
for(int i = 0;i<size;i++)
{
File f = files.getFile(i);
// 判断文件路径是否存在。注意这里只能判断文件组件的值是否为空,而不是判断路径是否有效或本地文件是否存在
if(f.isMissing())
{
//
}
// 获取文件名
String fname = f.getFileName();
// 获取文件绝对路径
String fPath = f.getFilePathName();
// 获取文件的扩展名
String fExt = f.getFileExt();
// 保存文件
myupload.save(newDirectory, SmartUpload.SAVE_PHYSICAL);
// 判断文件是否存在,并已上传文件名为新文件名
java.io.File file = new java.io.File(newDirectory + fname);
if(file.exists())
{
file.renameTo(new java.io.File(newDirectory + newFileName));
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (SmartUploadException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}