JS+Struts2多文件上传完整示例
1、JSP页面:
JS控制增加删除多个上传文件框,代码如下:
2、Action后台处理上传文件:
-
-
private List<File> uploadFile;
-
-
private List<String> uploadFileFileName;
-
-
public String mUploadFile() {
-
if (null == uploadFile) {
-
this.addActionError("请上传文件!");
-
} else {
-
String fileName = "";
-
try {
-
-
String directory = ServletActionContext.getServletContext().getRealPath("/uploads");
-
- FileUtil.makeDir(directory);
-
-
for(int i=0,j=uploadFile.size();i<j;i++){
- fileName = uploadFileFileName.get(i);
- String filePath = directory + File.separator + fileName;
-
FileUtil.uploadFile(uploadFile.get(i), new File(filePath));
- }
-
} catch (IOException e) {
-
this.addActionMessage("");
- }
-
this.addActionMessage("文件上传成功!");
- }
-
return "fileUpload";
- }
FileUtil代码如下:
- public class FileUtil {
-
-
private static final int BUFFER_SIZE = 16 * 1024;
-
-
public static void uploadFile(File src, File dst) throws IOException {
-
-
InputStream in = null;
-
OutputStream out = null;
-
try {
-
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
-
out = new BufferedOutputStream(new FileOutputStream(dst),
- BUFFER_SIZE);
-
byte[] buffer = new byte[BUFFER_SIZE];
-
while (in.read(buffer) > 0) {
- out.write(buffer);
- }
-
} finally {
-
if (null != in) {
- in.close();
- }
-
if (null != out) {
- out.close();
- }
- }
-
- }
-
-
public static String getExtention(String fileName) {
-
int pos = fileName.lastIndexOf(".");
-
return fileName.substring(pos);
- }
-
-
public static void makeDir(String directory) {
-
File dir = new File(directory);
-
-
if (!dir.isDirectory()) {
- dir.mkdirs();
- }
-
- }
-
-
public static String generateFileName(String fileName)
-
throws UnsupportedEncodingException {
-
DateFormat format = new SimpleDateFormat("yyMMddHHmmss");
-
String formatDate = format.format(new Date());
-
String extension = fileName.substring(fileName.lastIndexOf("."));
-
fileName = new String(fileName.getBytes("iso8859-1"), "gb2312");
-
return fileName + "_" + formatDate + new Random().nextInt(10000)
- + extension;
- }
-
- }
扩展:
1.可以实现带进度条的上传与下载;
2.可以用xml文件记录上传的文件清单,并且可以根据页面对上传文件的操作来修改相应的xml文件;