用jsp实现简单的图片上传功能

来源:互联网 发布:notepad mac 破解 编辑:程序博客网 时间:2024/05/17 02:17

jsp实现简单的图片上传功能

1 先做一个页面,选择上传的图片
<body>
   <form action="uploadServlet"enctype="multipart/form-data" method="POST" >
     
      selectimage: <input type="file"name="myfile"/><br>
      <input type="submit"value="upload"/>
   </form>
</body>
注意要以enctype="multipart/form-data"编码形式来提交
2 在转到的servlet读取到传过来的内容,并截取出图片的信息,建一个文件,然后把信息保存进去,实现了图片的上传。
package com.zhou.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;

importjavax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public classUploadServlet extends HttpServlet {

publicUploadServlet() {
   super();
}

public voiddestroy() {
   super.destroy(); // Just puts "destroy" string in log
   // Put your code here
}

public voiddoGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   String contentType=request.getContentType();
   String servername=request.getServerName();
   String realpath=request.getRealPath(servername);
   System.out.println(contentType);

   InputStream in=null;
   OutputStream out=null;
   if(contentType.indexOf("multipart/form-data")>=0){
    in=request.getInputStream();
    int formlength=request.getContentLength();
    byte[] formcontent=new byte[formlength];
    int totalread=0;
    int nowread=0;
    while(totalread<formlength){
     nowread=in.read(formcontent,totalread, formlength);
     totalread+=nowread;
    }
    String strcontent=new String(formcontent);
    System.out.println(strcontent);
    int typestart=strcontent.indexOf("Content-Type:")+14;
    int typeend=strcontent.indexOf("\n", typestart)-1;
    String formType=strcontent.substring(typestart, typeend);
   if(formType.equals("image/jpeg")||formType.equals("image/gif")||formType.equals("image/pjepg")){
     intfilenamestart=strcontent.indexOf("filename=\"")+10;
     intfilenameend=strcontent.indexOf("\n",filenamestart)-2;
     String filename=strcontent.substring(filenamestart,filenameend);
    filename=filename.substring(filename.lastIndexOf("."));
     String newfilename=""+(newDate()).getDate()+(new Date()).getHours()+(new Date()).getMinutes()+(newDate()).getSeconds();
     newfilename=newfilename+filename;
     realpath=realpath+"";
     newfilename=realpath+newfilename;
     int filestart=strcontent.indexOf("\n",typestart)+1;
    filestart=strcontent.indexOf("\n",filestart)+1;
     intintboundary=contentType.indexOf("boundary=")+10;
     String strboundary=contentType.substring(intboundary);
     int fileend=strcontent.indexOf(strboundary,filestart)-4;
     StringsaveFile=strcontent.substring(filestart,fileend);
     intcontentstart=strcontent.substring(0,filestart).getBytes().length;
     int contentend=strcontent.substring(0,fileend).getBytes().length;
     System.out.println(saveFile);
     File myfile=new File(realpath);
     if(!myfile.exists()){
      myfile.mkdirs();
     }
     out=new FileOutputStream(newfilename);
     out.write(formcontent, contentstart,contentend-contentstart);
     response.sendRedirect("show.jsp");
    }else{
     response.sendRedirect("error.jsp");
    }
   }
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   doGet(request,response);
}

public voidinit() throws ServletException {
   // Put your code here
}

}
3 配置好xml里的servlet,当然可以在建servlet配置。

<servlet>
    <description>This is the description of my J2EEcomponent</description>
    <display-name>This is the display name of my J2EEcomponent</display-name>
    <servlet-name>uploadServlet</servlet-name>
   <servlet-class>com.zhou.action.UploadServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>

4 部署运行程序,可以在你的部署目录下的localhost下upload里面看到你上传的图片了。

表单中enctype=“multipart/form-data”的意思,是设置表单的MIME编码 
默认情况,这个编码格式是application/x-www-form-urlencoded,可以通过request.getParameter来获取表单中的内容 
但是文件上传需要接受的是二进制的数据需要使用multipart/form-data,才能完整的传递文件数据,进行下面的操作 
使用了此设置,就不能利用getParameter直接获取文本内容了,而是用一个字节数组来接收内容,然后再转换成String类型

 

0 0
原创粉丝点击