各位哥哥姐姐!请教,怎样在jsp中实现文件的批量上传阿。 jspsmartUpload支持多个文件上传的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package com.upload;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;/** * * Title: 文件上載類 * Description: 既能対文件上載、又能取得輸入框的値,最多可同時上伝255个文件 * Copyright: Copyright (c) 2002 * Company: Tekson * @author 莫? * @version 1.0 */public class MoqUploadBean { private String[] sourceFile = new String[255]; //源文件名 private String[] suffix = new String[255]; //文件后墜名 private String canSuffix = ".gif.jpg.jpeg.png"; //可上伝的文件后墜名 private String objectPath = "c:/"; //目標文件目緑 private String[] objectFileName = new String[255]; //目標文件名 private ServletInputStream sis = null; //輸入流 private String[] description = new String[255]; //描述状太 private long size = 100 * 1024; //限制大小 private int count = 0; //已伝輸文件数目 private byte[] b = new byte[4096]; //字節流存放数組 private boolean successful = true; private Hashtable fields = new Hashtable(); public MoqUploadBean() { } //設置上伝文件的后墜名 public void setSuffix(String canSuffix) { this.canSuffix = canSuffix; } //設置文件保存路径 public void setObjectPath(String objectPath) { this.objectPath = objectPath; } //設置文件保存大小 public void setSize(long maxSize) { this.size = maxSize; } //文件上伝処理程序 public void setSourceFile(HttpServletRequest request) throws IOException { sis = request.getInputStream(); int a = 0; int k = 0; String s = ""; while ( (a = sis.readLine(b, 0, b.length)) != -1) { s = new String(b, 0, a); if ( (k = s.indexOf("filename=\"")) != -1) { // 取得文件数据 s = s.substring(k + 10); k = s.indexOf("\""); s = s.substring(0, k); sourceFile[count] = s; k = s.lastIndexOf("."); suffix[count] = s.substring(k + 1); if (canTransfer(count)) { transferFile(count); } ++count; } else if ( (k = s.indexOf("name=\"")) != -1) { // 普通表単輸入元素,獲取輸入元素名字 String fieldName = s.substring(k+6, s.length()-3); sis.readLine(b, 0, b.length); StringBuffer fieldValue = new StringBuffer(b.length); while ( (a = sis.readLine(b, 0, b.length)) != -1) { s = new String(b, 0, a-2); if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { break; } else { fieldValue.append(s); } } fields.put(fieldName, fieldValue.toString()); } if (!successful) break; } } //取得表単元素値 public String getFieldValue(String fieldName) { if (fields == null || fieldName == null) { return null; } return (String) fields.get(fieldName); } //取得上伝文件数 public int getCount() { return count; } //取得目標路径 public String getObjectPath() { return objectPath; } //取得源文件名 public String[] getSourceFile() { return sourceFile; } //取得目標文件名 public String[] getObjectFileName() { return objectFileName; } //取得上伝状太描述 public String[] getDescription() { return description; } //判断上伝文件的類型 private boolean canTransfer(int i) { suffix[i] = suffix[i].toLowerCase(); //遮个是用来上伝図片的,各位可以把后墜名改掉或者不要遮个条件 if (sourceFile[i].equals("") || (!(canSuffix.indexOf("."+suffix[i])>=0))) { description[i] = "ERR: File suffix is wrong."; return false; } else { return true; } } //上伝文件転還 private void transferFile(int i) { String x = Long.toString(new java.util.Date().getTime()); try { objectFileName[i] = x + "." + suffix[i]; FileOutputStream out = new FileOutputStream(objectPath + objectFileName[i]); int a = 0; int k = 0; long hastransfered = 0; //標示已京伝輸的字節数 String s = ""; while ( (a = sis.readLine(b, 0, b.length)) != -1) { s = new String(b, 0, a); if ( (k = s.indexOf("Content-Type:")) != -1) { break; } } sis.readLine(b, 0, b.length); while ( (a = sis.readLine(b, 0, b.length)) != -1) { s = new String(b, 0, a); if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { break; } out.write(b, 0, a); hastransfered += a; if (hastransfered >= size) { description[count] = "ERR: The file " + sourceFile[count] + " is too large to transfer. The whole process is interrupted."; successful = false; break; } } if (successful) { description[count] = "Right: The file " + sourceFile[count] + " has been transfered successfully."; } out.close(); if (!successful) { sis.close(); File tmp = new File(objectPath + objectFileName[count]); tmp.delete(); } } catch (IOException ioe) { description[i] = ioe.toString(); } } public static void main(String[] args) { System.out.println("Test OK"); }} 一楼的方法不错,jspsmart很方便 我的Servlet执行不了啊,求大家看看 静态页面提交到jsp页面时,出现下载要提交的jsp页面,怎么回事?菜鸟求解 jsp读取文件并显示 a标签的跳转问题 hibernate 查询问题 程序出错了?? struts问题。 现有的struts+spring+jpa集成activiti的问题 一个老问题--关于文件下载(在线等待) JSP+JAVABEAN程序员月薪几K? 关于response.sendRedirect的问题,困挠了几天,真烦,希望各位高手赐教,谢谢!! throw new ServletException(e.toString()); 这行出现了问题。
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
*
* Title: 文件上載類
* Description: 既能対文件上載、又能取得輸入框的値,最多可同時上伝255个文件
* Copyright: Copyright (c) 2002
* Company: Tekson
* @author 莫?
* @version 1.0
*/
public class MoqUploadBean {
private String[] sourceFile = new String[255]; //源文件名
private String[] suffix = new String[255]; //文件后墜名
private String canSuffix = ".gif.jpg.jpeg.png"; //可上伝的文件后墜名
private String objectPath = "c:/"; //目標文件目緑
private String[] objectFileName = new String[255]; //目標文件名
private ServletInputStream sis = null; //輸入流
private String[] description = new String[255]; //描述状太
private long size = 100 * 1024; //限制大小
private int count = 0; //已伝輸文件数目
private byte[] b = new byte[4096]; //字節流存放数組
private boolean successful = true;
private Hashtable fields = new Hashtable();
public MoqUploadBean() {
}
//設置上伝文件的后墜名
public void setSuffix(String canSuffix) {
this.canSuffix = canSuffix;
}
//設置文件保存路径
public void setObjectPath(String objectPath) {
this.objectPath = objectPath;
}
//設置文件保存大小
public void setSize(long maxSize) {
this.size = maxSize;
}
//文件上伝処理程序
public void setSourceFile(HttpServletRequest request) throws IOException {
sis = request.getInputStream();
int a = 0;
int k = 0;
String s = "";
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a);
if ( (k = s.indexOf("filename=\"")) != -1) {
// 取得文件数据
s = s.substring(k + 10);
k = s.indexOf("\"");
s = s.substring(0, k);
sourceFile[count] = s;
k = s.lastIndexOf(".");
suffix[count] = s.substring(k + 1);
if (canTransfer(count)) {
transferFile(count);
}
++count;
} else if ( (k = s.indexOf("name=\"")) != -1) {
// 普通表単輸入元素,獲取輸入元素名字
String fieldName = s.substring(k+6, s.length()-3);
sis.readLine(b, 0, b.length);
StringBuffer fieldValue = new StringBuffer(b.length);
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a-2);
if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) {
break;
} else {
fieldValue.append(s);
}
}
fields.put(fieldName, fieldValue.toString());
}
if (!successful)
break;
}
}
//取得表単元素値
public String getFieldValue(String fieldName) {
if (fields == null || fieldName == null) {
return null;
}
return (String) fields.get(fieldName);
}
//取得上伝文件数
public int getCount() {
return count;
}
//取得目標路径
public String getObjectPath() {
return objectPath;
}
//取得源文件名
public String[] getSourceFile() {
return sourceFile;
}
//取得目標文件名
public String[] getObjectFileName() {
return objectFileName;
}
//取得上伝状太描述
public String[] getDescription() {
return description;
}
//判断上伝文件的類型
private boolean canTransfer(int i) {
suffix[i] = suffix[i].toLowerCase();
//遮个是用来上伝図片的,各位可以把后墜名改掉或者不要遮个条件
if (sourceFile[i].equals("") || (!(canSuffix.indexOf("."+suffix[i])>=0))) {
description[i] = "ERR: File suffix is wrong.";
return false;
}
else {
return true;
}
}
//上伝文件転還
private void transferFile(int i) {
String x = Long.toString(new java.util.Date().getTime());
try {
objectFileName[i] = x + "." + suffix[i];
FileOutputStream out = new FileOutputStream(objectPath + objectFileName[i]);
int a = 0;
int k = 0;
long hastransfered = 0; //標示已京伝輸的字節数
String s = "";
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a);
if ( (k = s.indexOf("Content-Type:")) != -1) {
break;
}
}
sis.readLine(b, 0, b.length);
while ( (a = sis.readLine(b, 0, b.length)) != -1) {
s = new String(b, 0, a);
if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) {
break;
}
out.write(b, 0, a);
hastransfered += a;
if (hastransfered >= size) {
description[count] = "ERR: The file " + sourceFile[count] +
" is too large to transfer. The whole process is interrupted.";
successful = false;
break;
}
}
if (successful) {
description[count] = "Right: The file " + sourceFile[count] +
" has been transfered successfully.";
}
out.close();
if (!successful) {
sis.close();
File tmp = new File(objectPath + objectFileName[count]);
tmp.delete();
}
}
catch (IOException ioe) {
description[i] = ioe.toString();
}
}
public static void main(String[] args) {
System.out.println("Test OK");
}
}