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


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类型





  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现图片上传功能,需要使用JSP和Servlet技术。 1. 在JSP页面中,使用HTML的form表单,添加一个input标签,type属性为file,name属性为要上传的文件的名称。 ``` <form action="uploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> ``` 2. 在Servlet中,获取上传的文件,首先需要判断form表单的enctype属性是否为multipart/form-data。然后,使用request.getPart()方法获取上传的文件。 ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检查enctype属性是否为multipart/form-data boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { response.getWriter().println("不支持的编码类型!"); return; } // 获取上传的文件 Part filePart = request.getPart("file"); String fileName = filePart.getSubmittedFileName(); InputStream fileContent = filePart.getInputStream(); // 对文件进行处理 // ... } ``` 3. 对于上传的文件,可以进行一些处理,例如保存到服务器的文件系统中,或者存储到数据库中。保存到文件系统中可以使用FileOutputStream类,存储到数据库中则需要使用JDBC技术。 ``` // 保存到文件系统中 String filePath = "C:/uploads/" + fileName; FileOutputStream outputStream = new FileOutputStream(filePath); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fileContent.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.close(); fileContent.close(); // 存储到数据库中 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); String sql = "INSERT INTO files (name, content) VALUES (?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, fileName); ps.setBinaryStream(2, fileContent); ps.executeUpdate(); ps.close(); conn.close(); ``` 4. 最后,在Servlet中返回一个响应,告诉用户上传成功。 ``` response.getWriter().println("文件上传成功!"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值