上传文件例子如下
<%@ page contentType="text/html;charset=GB2312" %> <HTML> <head> <title>上传文件示例</title> </head> <BODY> 上传文件程序应用示例 <FORM action="AccepteUploadFile.jsp" method="post" ENCTYPE="multipart/form-data"> 请选择要上传的文件:<input type="file" name="upfile" size="50"> <INPUT type="submit" value="提交"> </FORM> </BODY> </HTML>
?
这个JSP页面是用来上传文件的初始界面。声明一个表单,表单中有一个文件类型的输入框,用于选择上传的文件 单击浏览可以选择文件 然后点击提交按钮可以把其交给另一个jsp文件
<%@ page contentType="text/html;charset=GB2312" %> <%@ 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; } } %> <HTML> <head> <title>接收上传的文件</title> </head> <BODY> <% //接收上传的文件内容的临时文件的文件名 String tempFileName=new String("tempFileName1"); //tempFile1对象指向这个临时文件 File tempFile1=new File("D:/",tempFileName); //outputFile1文件输出流指向这个临时文件 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(); //randomFile1对象指向临时文件 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); //得到第4行回车符号的位置,这是上传的文件数据的开始位置 long forthEnterPosition=0; int forth=1; while((n=randomFile1.readByte())!=-1&&(forth<=4)) if(n=='\n') { forthEnterPosition=randomFile1.getFilePointer(); forth++; } //生成上传文件的目录 File FileUploadDir=new File("d:/tomcat55/webapps/root/","upload"); FileUploadDir.mkdir(); //saveFile1对象指向要保存的文件 File saveFile1=new File("d:/tomcat55/webapps/root/upload/",fileName); RandomAccessFile randomFile2=new RandomAccessFile(saveFile1,"rw"); //找到上传的文件数据的结束位置,即倒数第4行 randomFile1.seek(randomFile1.length()); long endPosition=randomFile1.getFilePointer(); int j=1; while((endPosition>=0)&&(j<=4)) { endPosition--; randomFile1.seek(endPosition); if(randomFile1.readByte()=='\n') 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("文件"+fileName+"已成功上传!<br>"); %> <image src="<%="http://localhost:8080/upload/"+fileName%>"> </BODY> </HTML>
?
codetoString这里主要是处理文字编码的问题,否则中文字符的名字将会出现乱码
?