• 用jsp实现简单的图片上传功能(multipart/form-data形式的表单)


    2008-10-11 22:07

    用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;

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

    public class UploadServlet extends HttpServlet {

    public UploadServlet() {
       super();
    }

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

    public void doGet(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(" ", typestart)-1;
        String formType=strcontent.substring(typestart, typeend);
        if(formType.equals("image/jpeg")||formType.equals("image/gif")||formType.equals("image/pjepg")){
         int filenamestart=strcontent.indexOf("filename="")+10;
         int filenameend=strcontent.indexOf(" ",filenamestart)-2;
         String filename=strcontent.substring(filenamestart, filenameend);
         filename=filename.substring(filename.lastIndexOf("."));
         String newfilename=""+(new Date()).getDate()+(new Date()).getHours()+(new Date()).getMinutes()+(new Date()).getSeconds();
         newfilename=newfilename+filename;
         realpath=realpath+"";
         newfilename=realpath+newfilename;
         int filestart=strcontent.indexOf(" ",typestart)+1;
         filestart=strcontent.indexOf(" ",filestart)+1;
         int intboundary=contentType.indexOf("boundary=")+10;
         String strboundary=contentType.substring(intboundary);
         int fileend=strcontent.indexOf(strboundary,filestart)-4;
         String saveFile=strcontent.substring(filestart,fileend);
         int contentstart=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 void init() throws ServletException {
       // Put your code here
    }

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

    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</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类型。

     
  • 相关阅读:
    [luogu]P1852跳跳棋
    StdDraw绘图
    Java-Timer-Stop
    人之初
    单例模式--延时初始化
    ubuntu忘记密码
    QT5 TK1 串口通信
    金秋十月
    级联分类器训练-----OpenCV
    Hu矩SVM训练及检测-----OpenCV
  • 原文地址:https://www.cnblogs.com/mybabyyh/p/4353176.html
Copyright © 2020-2023  润新知