Servlet文件上传

注:Servlet3.0及以上版本使用,以下版本需要用第三方工具,本方法不适用

HTML

<fieldset>
    <legend>上传单个文件</legend>
    <form action="acceptfile" enctype="multipart/form-data" method="post">
        上传文件:<input type="file" name="file"><br>
        <input type="submit" value="上传">
    </form>
</fieldset>

Servlet

import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.*;
import java.util.Collection;
@MultipartConfig( maxRequestSize = 30000000,maxFileSize= 10000000)
//注解,设置上传文件总量上限,设置单个文件大小上限
@WebServlet(value = "/acceptfile" )
public class AcceptFileServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        try{
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8"); 
            //设置文件接收路径
            String savepath=request.getServletContext().getRealPath("/WEB-INF/uploadfile");
            //判断有没有文件夹,没有自动创建
            File f=new File(savepath);
            if(!f.exists())f.mkdirs();
            Collection<Part> parts=request.getParts();
            //判断是单文件还是多文件
            if(parts.size()==1){
                Part part=request.getPart("file");
                String filename=savepath+File.separator+getFileName(part.getHeader("content-disposition"));
                File file=new File(filename);
                if(!file.exists())file.createNewFile();
                //File.separator就是自动根据系统选择/和\路径分隔符
                part.write(filename);
            }else{
                for (Part part:parts){
                    String filename=savepath+File.separator+getFileName(part.getHeader("content-disposition"));
                    File file=new File(filename);
                    if(!file.exists())file.createNewFile();
                    part.write(filename);
                }
            }
            PrintWriter out=response.getWriter();
            out.println("上传成功");
            out.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public void doPost(HttpServletRequest request,HttpServletResponse response) {
        this.doGet(request,response);
    } 
    //从http报头获取文件名
    public String getFileName(String header){
        String[] temparr1=header.split(";");
        int p=temparr1[2].indexOf('=');//找到第一个等号
        String temparr2=temparr1[2].substring(p+1);//去掉第一个等号以及,文件名前后的两个引号
        return temparr2.substring(temparr2.lastIndexOf("\\")+1).replace("\"","");
    }
}

  context.xml

<Context allowCasualMultipartParsing="true">tomcat添加属性值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet文件上传功能可以通过使用注解@MultipartConfig将Servlet标识为支持文件上传,然后将multipart/form-data的POST请求封装成Part对象,通过Part对象对上传的文件进行操作。以下是一个文件上传Servlet示例代码: ```java @WebServlet("/uploadServlet") @MultipartConfig // 如果是文件上传,必须要设置该注解! public class UploadServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("文件上传..."); // 设置请求的编码格式 req.setCharacterEncoding("UTF-8"); // 获取普通表单项(获取参数) String uname = req.getParameter("uname"); // 表单中表单元素的name属性值 System.out.println("uname: " + uname); // 获取Part对象(Servlet将multipart/form-data的POST请求封装成Part对象) Part part = req.getPart("myfile"); // 通过Part对象得到上传的文件名 String fileName = part.getSubmittedFileName(); System.out.println("上传文件名:" + fileName); // 得到文件存放的路径 String filePath = req.getServletContext().getRealPath("/"); System.out.println("文件存放路径:" + filePath); // 上传文件到指定目录 part.write(filePath + "/" + fileName); } } ``` 而文件下载功能可以通过设置download属性来实现。以下是一个文件下载的JSP页面的示例代码: ```html <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>文件下载</title> </head> <body> <!-- 浏览器能够识别的资源 --> <a href="download/hello.txt">文本文件</a> <a href="download/pic.jpg">图片文件</a> <!-- 浏览器不能够识别的资源 --> <a href="download/zzz.rar">压缩文件</a> <hr> <a href="download/hello.txt" download>文本文件</a> <a href="download/pic.jpg" download="test.png">图片文件</a> <hr> <form action="downloadServlet"> 文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名"> <button>下载</button> </form> </body> </html> ``` 以上是文件上传和下载的实现方法,你可以根据需要进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值