本文是一个纯Jsp的自定义的单个文件上载代码: <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.io.*"%> <%@ page import="java.util.*"%> <%@ page import="javax.servlet.*"%> <%@ page import="javax.servlet.http.*"%> upFile <% //定义上载文件的最大字节 int MAX_SIZE = 102400 * 102400; // 创建根路径的保存变量 String rootPath; //声明文件读入类 DataInputStream in = null; FileOutputStream fileOut = null; //取得客户端的网络地址 String remoteAddr = request.getRemoteAddr(); //out.print(remoteAddr); //获得服务器的名字 String serverName = request.getServerName(); //out.print(serverName); //取得jsp文件相对与根地址的地址 //out.print(request.getServletPath()); //取得互联网程序的绝对地址 String realPath = request.getRealPath(serverName); //out.println(realPath); realPath = realPath.substring (0,realPath.lastIndexOf("\\")); //out.print(realPath); //创建文件的保存目录"\upload" rootPath = realPath + "\\upload\\"; //out.println(rootPath); //取得客户端上传的数据类型 String contentType = request.getContentType(); //out.println (" 客户端上传的数据类型 = try{ if(contentType.indexOf ("multipart/form-data") >= 0) { //读入上传的数据 in = new DataInputStream (request.getInputStream()); int formDataLength = request.getContentLength(); if(formDataLength > MAX_SIZE){ out.println (" 上传的文件字节数不可以超过" return; } //保存上传文件的数据 byte dataBytes[] = new byte[formDataLength]; int byteRead = 0; int totalBytesRead = 0; //上传的数据保存在byte数组 while(totalBytesRead < formDataLength) { byteRead = in.read(dataBytes, totalBytesRead,formDataLength); totalBytesRead += byteRead; } //根据byte数组创建字符串 String file = new String(dataBytes); //out.println(file); //取得上传的数据的文件名 String saveFile = file.substring (file.indexOf("filename=\"") + 10); saveFile = saveFile.substring (0,saveFile.indexOf("\n")); saveFile = saveFile.substring (saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); int lastIndex = contentType.lastIndexOf("="); //取得数据的分隔字符串 String boundary = contentType.substring (lastIndex + 1,contentType.length()); //创建保存路径的文件名 String fileName = rootPath + saveFile; //out.print(fileName); int pos; pos = file.indexOf("filename=\""); pos = file.indexOf("\n",pos) + 1; pos = file.indexOf("\n",pos) + 1; pos = file.indexOf("\n",pos) + 1; int boundaryLocation = file.indexOf(boundary,pos) - 4; //out.println(boundaryLocation); //取得文件数据的开始的位置 int startPos = ( (file.substring(0,pos)).getBytes()).length; //out.println(startPos); //取得文件数据的结束的位置 int endPos = ((file.substring (0,boundaryLocation)).getBytes()).length; //out.println(endPos); //检查上载文件是否存在 File checkFile = new File(fileName); if(checkFile.exists()){ out.println(" " + saveFile + } //检查上载文件的目录是否存在 File fileDir = new File(rootPath); if(!fileDir.exists()) { fileDir.mkdirs(); } //创建文件的写出类 fileOut = new FileOutputStream(fileName); //保存文件的数据 fileOut.write(dataBytes,startPos, (endPos - startPos)); fileOut.close(); out.println(" " + saveFile + }else{ String content = request.getContentType(); out.println (" 上传的数据类型不是是multipart/form-data ");} }catch(Exception ex) { throw new ServletException(ex.getMessage()); } %> |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 17:28 , Processed in 0.257287 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.