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

java 专栏收录该内容
77 篇文章 0 订阅


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 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("\n", 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("\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;
           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 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类型





  • 5
    点赞
  • 1
    评论
  • 18
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值