以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Java/Eclipse 』 (http://bbs.xml.org.cn/list.asp?boardid=41) ---- 使用纯jsp+javaBean实现任意文件类型上传的例子。 (http://bbs.xml.org.cn/dispbbs.asp?boardid=41&rootid=&id=10229) |
-- 作者:admin -- 发布时间:9/23/2004 12:39:00 AM -- 使用纯jsp+javaBean实现任意文件类型上传的例子。 ● 使用纯jsp+javaBean实现任意文件类型上传的例子发信人: yqzh (), 信区: J2EE 标 题: 使用纯jsp+javaBean实现任意文件类型上传的例子。 发信站: BBS 水木清华站 (Thu May 6 21:58:36 2004), 站内 javaBean部分的代码: package upload; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class uploadBean { private String[] sourceFile = new String[255]; //源文件名 private String[] suffix = new String[255]; //文件后缀名 private String canSuffix = ".gif.jpg.jpeg.png"; //可上传的文件后缀名 private String objectPath = "e:/"; //目标文件目录 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 uploadBean() { }//public uploadBean() //设置上传文件的后缀名 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 setSize(long 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"); } }//public class uploadBean jsp第一部分的代码: <%@ page contentType="text/html; charset=GBK" %> <html> <head> <title> upload1 </title> </head> <body bgcolor="#ffffff"> <form action="upload2.jsp" enctype="MULTIPART/FORM-DATA" method="post"> 选择文件:<input type="file" name="filename" /> <input type="submit" value="上载" /> </form> </body> </html> jsp第二部分的代码: <%@ page contentType="text/html; charset=GBK" %> <jsp:useBean id="fileBean" scope="page" class="upload.uploadBean" /> <% fileBean.setObjectPath("e:\");//这可以设成要存放文件的路径。 fileBean.setSize(10000*1024); fileBean.setSuffix(".gif.jpg.png.jpge.html.htm"); fileBean.setSourceFile(request); String [] saSourceFile = fileBean.getSourceFile(); String [] saObjectFile = fileBean.getObjectFileName(); String [] saDescription = fileBean.getDescription(); String sObjectPath = fileBean.getObjectPath(); %> 以上使用Win2000server+Weblogic7.0调试成功。 -- 告别郁闷,靠的是汗水; 力争上游,凭的是意志; 精深广博,要的是交流. ※ 来源:·BBS 水木清华站 http://smth.org·[FROM: 166.111.194.*] 索引页面|上一篇|下一篇
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |