当前位置:编程学习 > JAVA >>

jsp实现文件上传问题


第一个文件uploadfile.jsp
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<html>
<head><title>文件上传</title></head>
<body>
<form name="form1" method="post" action="acceptUploadFile.jsp" enctype="multlpart/form-data">
upload:
<label>
<input type="file" name="upfile" size="30"/>
</label>
<p>
<label>
<input type="submit" name="submit" value="提交" />
</label>
</p>
</form>
</body>
</html>

第二个文件 acceptUploadFile.jsp
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<%@ page import="java.io.*" %>
<%!
//中文处理方法
public String codeToString(String str) {
String s = str;
try {
byte[] tempB = s.getBytes("ISO-8859-1");
s = new String(tempB);
return s;
}catch(Exception e) {
return s;
}
}%>
  <%
   //接收上传的文件内容的临时文件的文件名
   String tempFileName = new String("tempFileName1");
   String path = request.getRealPath("/");
  
   File tempFile1 = new File(path,tempFileName);
   FileOutputStream outputFile1 = new FileOutputStream(tempFile1);
   //得到客户端提交的所有数据
   InputStream fileSource1 = request.getInputStream();
    byte b[] = new byte[1000];
    int n ;
    
    while((n = fileSource1.read(b)) != -1) {
     outputFile1.write(b,0,n);    //将得到的客户端数据写入临时文件
    }
    outputFile1.close();
    fileSource1.close();
   
    RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1,"r");
    randomFile1.readLine(); //读取第一行数据
    String FilePath = randomFile1.readLine();
    int position = FilePath.lastIndexOf("\\"); //得到文件名
    //文件名中文处理
    String fileName = codeToString(FilePath.substring(position+1,FilePath.length()-1));
    randomFile1.seek(0); //重新定位指针到文件头
    long forthEnterPosition = 0;
    int forth = 1; //得到第四行回车符号的位置,这是上传文件的开始位置
    while((n = randomFile1.readByte()) != -1 && (forth <= 4)) {
    if( n == '\n') {
    forthEnterPosition = randomFile1.getFilePointer();
    forth++;
    }
    }
    //根据客户上传文件的名字,将该文件保存到磁盘中
    File FileUploadDir = new File(path,"upload");
    FileUploadDir.mkdir(); //生成上传文件的目录
    File saveFile1 = new File(path + "/upload", fileName);
    RandomAccessFile randomFile2 = new RandomAccessFile(saveFile1,"rw");
    randomFile1.seek(randomFile1.length());
    //找到上传的文件数据的结束位置,即倒数第四行
   long endPosition = randomFile1.getFilePointer();
   int j = 1;
   while((endPosition >= 0) && (j <= 4)) {
   endPosition--;
randomFile1.seek(endPosition);
if(randomFile1.readByte() == '\n') {
endPosition = randomFile1.getFilePointer();
j++;
}
  }
  
    randomFile1.seek(forthEnterPosition);
    long startPoint = randomFile1.getFilePointer();
  while(startPoint < endPosition-1) {
randomFile2.write(randomFile1.readByte());
startPoint = randomFile1.getFilePointer();

randomFile2.close();
randomFile1.close();
tempFile1.delete(); //删除临时文件
out.print("file:" + fileName + "succeed upload!<br />");
%>
  


为什么会报错啊~!求大神相告! --------------------编程问答-------------------- 为什么会报错   这个问题不如        为什么报XXX错 --------------------编程问答--------------------
引用 1 楼 dqw2d2re 的回复:
为什么会报错   这个问题不如        为什么报XXX错

type Exception report

message An exception occurred processing JSP page /acceptUploadFile.jsp at line 36

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /acceptUploadFile.jsp at line 36

33:     RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1,"r");
34:     randomFile1.readLine(); //读取第一行数据
35:     String FilePath = randomFile1.readLine();
36:     int position = FilePath.lastIndexOf("\\"); //得到文件名
37:     //文件名中文处理
38:     String fileName = codeToString(FilePath.substring(position+1,FilePath.length()-1));
39:     randomFile1.seek(0); //重新定位指针到文件头


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

--------------------编程问答--------------------
引用 2 楼 u011990285 的回复:
Quote: 引用 1 楼 dqw2d2re 的回复:

为什么会报错   这个问题不如        为什么报XXX错

type Exception report

message An exception occurred processing JSP page /acceptUploadFile.jsp at line 36

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /acceptUploadFile.jsp at line 36

33:     RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1,"r");
34:     randomFile1.readLine(); //读取第一行数据
35:     String FilePath = randomFile1.readLine();
36:     int position = FilePath.lastIndexOf("\\"); //得到文件名
37:     //文件名中文处理
38:     String fileName = codeToString(FilePath.substring(position+1,FilePath.length()-1));
39:     randomFile1.seek(0); //重新定位指针到文件头


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)





没怎么看,不知道你解决了没,但是 这个filepath你看是不是应该去找   /  而不是 \,或者简单把他打出来,可能是空指针异常吧 --------------------编程问答--------------------
引用 3 楼 dqw2d2re 的回复:
Quote: 引用 2 楼 u011990285 的回复:

Quote: 引用 1 楼 dqw2d2re 的回复:

为什么会报错   这个问题不如        为什么报XXX错

type Exception report

message An exception occurred processing JSP page /acceptUploadFile.jsp at line 36

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /acceptUploadFile.jsp at line 36

33:     RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1,"r");
34:     randomFile1.readLine(); //读取第一行数据
35:     String FilePath = randomFile1.readLine();
36:     int position = FilePath.lastIndexOf("\\"); //得到文件名
37:     //文件名中文处理
38:     String fileName = codeToString(FilePath.substring(position+1,FilePath.length()-1));
39:     randomFile1.seek(0); //重新定位指针到文件头


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)





没怎么看,不知道你解决了没,但是 这个filepath你看是不是应该去找   /  而不是 \,或者简单把他打出来,可能是空指针异常吧


也没用呢~!!这个怎么搞嗯~!~!可以帮我改改么|?~!谢谢了~! --------------------编程问答-------------------- int position = FilePath.lastIndexOf("\\");  //得到文件名


没看出来错在哪里,debug试试FilePath里有"\\"字符吗 --------------------编程问答--------------------
引用 5 楼 gagewang1 的回复:
int position = FilePath.lastIndexOf("\\");  //得到文件名


没看出来错在哪里,debug试试FilePath里有"\\"字符吗


想了好久都没想出来~!怎么办 啊~! --------------------编程问答-------------------- 呵呵,其实这个问题很简单的啦,首先说出你这个问题。
你那个getRealPath("/");是以/方式得到的,所以你要试一试把path输出看看问题。然后接着这样解决基本没有问题了,你试一试用我的这种办法,应该没有什么问题。
其实,还有一个很重要的问题,你就算把这里改好了,后台也会抛出异常,就是你使用了request.getInputStream,你可知道,jsp被翻译成为servlet的时候已经自动把JspWriter给初始化了。你这个时候使用inputStream会抛出异常的。你先看看可以解决不,要是可以,又遇到了我说的问题,那我们在继续讨论。 --------------------编程问答--------------------
引用 7 楼 zy353003874 的回复:
呵呵,其实这个问题很简单的啦,首先说出你这个问题。
你那个getRealPath("/");是以/方式得到的,所以你要试一试把path输出看看问题。然后接着这样解决基本没有问题了,你试一试用我的这种办法,应该没有什么问题。
其实,还有一个很重要的问题,你就算把这里改好了,后台也会抛出异常,就是你使用了request.getInputStream,你可知道,jsp被翻译成为servlet的时候已经自动把JspWriter给初始化了。你这个时候使用inputStream会抛出异常的。你先看看可以解决不,要是可以,又遇到了我说的问题,那我们在继续讨论。

可以帮我简单的调试一下嘛~!为什么老报一些看不懂的错,语法没错,我还是新手  不太会用这个JSP --------------------编程问答-------------------- 你把你的源代码发给我吧,邮箱地址general_go@163.com --------------------编程问答-------------------- 试试  String path = request.getRealPath(""); --------------------编程问答-------------------- File tempFile1 = new File(path,tempFileName);

一般要加上:如果文件不存在,就创建的代码。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,