处理附件上传的JSP页面与JAVA Bean
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=GB18030
"
pageEncoding
=
"
GB18030
"
%>
<!
DOCTYPE html PUBLIC
"
-//W3C//DTD HTML 4.01 Transitional//EN
"
"
http://www.w3.org/TR/html4/loose.dtd
"
>
<
html
>
<
head
>
<
meta http
-
equiv
=
"
Content-Type
"
content
=
"
text/html; charset=GB18030
"
>
<
jsp:useBean id
=
"
FUpload
"
scope
=
"
page
"
class
=
"
edu.scnu.crjy.common.UploadFiles
"
></
jsp:useBean
>
</
head
>
<
body
>
<%
String documentRoot
=
getServletContext().getRealPath(
"
/
"
); String Dir
=
documentRoot
+
"
appendfiles//
"
+
request.getParameter(
"
childDir
"
); out.println(request.getParameter(
"
childDir
"
));
//
保存文件的路径,请确保目录存在,或改到其他目录
//
通过调用JavaBeans的方法完成上传操作
FUpload.setUploadDirectory(Dir); FUpload.uploadFile(request);
%>
<
script language
=
"
javascript
"
>
alert(
"
上传附件成功!
"
); document.location.href
=
"
../appendfileslist.jsp?childDir=<%=request.getParameter(
"
childDir
"
)%>
"
</
script
>
</
body
>
</
html
>
注:这个处理上传的bean有大部分是从csdn中获得的资料
package
edu.scnu.crjy.common;
import
java.io.
*
;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.ServletInputStream;
import
javax.servlet.ServletException;
public
class
UploadFiles
...
{ private static String newline = " " ; // 设定换行符 private String uploadDirectory = " . " ; // 默认的保存位置 private String ContentType = "" ; // 文件类型 private String CharacterEncoding = "" ; // 编码格式 // 设定文件要保存在服务器中的位置 public void setUploadDirectory(String s) ... { uploadDirectory = s; } // 提取文件名,本方法是把用户上传的文件按照原名保存 private String getFileName(String s) ... { int i = s.lastIndexOf( " / " ); if (i < 0 || i >= s.length() - 1 ) ... { i = s.lastIndexOf( " / " ); if (i < 0 || i >= s.length() - 1 ) return s; } return s.substring(i + 1 ); } // 得到content-type public void setContentType(String s) ... { ContentType = s; int j; if ((j = ContentType.indexOf( " boundary= " )) != - 1 ) ... { ContentType = ContentType.substring(j + 9 ); ContentType = " -- " + ContentType; } } // 得到文件编码格式 public void setCharacterEncoding(String s) ... { CharacterEncoding = s; } public void uploadFile(HttpServletRequest req) throws ServletException, IOException ... { setCharacterEncoding(req.getCharacterEncoding()); setContentType(req.getContentType()); uploadFile(req.getInputStream()); } public void uploadFile(ServletInputStream servletinputstream) throws ServletException, IOException ... { String s5 = null ; String filename = null ; byte Linebyte[] = new byte [ 4096 ]; byte outLinebyte[] = new byte [ 4096 ]; int ai[] = new int [ 1 ]; int ai1[] = new int [ 1 ]; String line; // 得到文件名 while ((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null ) ... { int i = line.indexOf( " filename= " ); if (i >= 0 ) ... { line = line.substring(i + 10 ); if ((i = line.indexOf( " " " )) > 0 ) line = line.substring( 0 , i); break ; } } filename = line; if (filename != null && ! filename.equals( " " " )) ... { filename = getFileName(filename); String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); if (sContentType.indexOf( " Content-Type " ) >= 0 ) readLine(Linebyte, ai, servletinputstream, CharacterEncoding); // 建立新文件的文件句柄 File file = new File(uploadDirectory, filename); // 建立生成新文件的输出流 FileOutputStream fileoutputstream = new FileOutputStream(file); while ((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null ) ... { if (sContentType.indexOf(ContentType) == 0 && Linebyte[ 0 ] == 45 ) break ; if (s5 != null ) ... { // 写入新文件 fileoutputstream.write(outLinebyte, 0 , ai1[ 0 ]); fileoutputstream.flush(); } s5 = readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding); if (s5 == null || s5.indexOf(ContentType) == 0 && outLinebyte[ 0 ] == 45 ) break ; fileoutputstream.write(Linebyte, 0 , ai[ 0 ]); fileoutputstream.flush(); } byte byte0; if (newline.length() == 1 ) byte0 = 2 ; else byte0 = 1 ; if (s5 != null && outLinebyte[ 0 ] != 45 && ai1[ 0 ] > newline.length() * byte0) fileoutputstream.write(outLinebyte, 0 , ai1[ 0 ] - newline.length() * byte0); if (sContentType != null && Linebyte[ 0 ] != 45 && ai[ 0 ] > newline.length() * byte0) fileoutputstream.write(Linebyte, 0 , ai[ 0 ] - newline.length() * byte0); fileoutputstream.close(); } } // readLine函数把表单提交上来的数据按行读取 private String readLine( byte Linebyte[], int ai[], ServletInputStream servletinputstream, String CharacterEncoding) ... { try ... { // 读取一行 ai[ 0 ] = servletinputstream.readLine(Linebyte, 0 , Linebyte.length); if (ai[ 0 ] == - 1 ) return null ; } catch (IOException ex) ... { return null ; } try ... { if (CharacterEncoding == null ) ... { // 用默认的编码方式把给定的byte数组转换为字符串 return new String(Linebyte, 0 , ai[ 0 ]); } else ... { // 用给定的编码方式把给定的byte数组转换为字符串 return new String(Linebyte, 0 , ai[ 0 ], CharacterEncoding); } } catch (Exception ex) ... { return null ; } } }