Servlet文件上传

网上还是有很多文件上传的案例,但是当我还不懂怎么上传的时候看起来还是非常吃力的.
今天老师讲解了怎么文件上传.我就把记下来,免得忘记
首先新建工程
这里写图片描述
我们先写前端index.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>FileUpload</title>
</head>
<body>
<form action="fileUpdate.do" method="post" enctype="multipart/form-data">
    <input type="file" required name="file"><br />
    <input type="submit" value="上传">
</form>
</body>
</html>

下面来创建Servlet
添加@WebServlet("/fileUpdate.do")注解用于将action提交到此Servlet
添加 @MultipartConfig 注解用于解析上传文件(没有这个注解就不能上传)
然后执行服务器,看看后台执行了什么东西
进入主页看到这样的界面
这里写图片描述
选择一个文件 点击上传按钮
在控制台出现这个东西
这里写图片描述
点击Name为fileUpload.do的东西
右边就会显示详细信息
这里写图片描述
定位到最下面看到红线圈出来的地方
这里写图片描述
这个就是上传的文件信息,所以在编写后端代码的时候就只需要解析这个信息就可以了.
回到Servlet 首先确定上传的文件存放目录(这段代码要写在doPost里面,因为文件上传只能用post,
get能够传送的东西很少,所以才用的post.我是这样认为的)

//存放文件目录
String path = "D:/Projects Files/images";
File file = new File(path);
if (!file.exists())
    file.mkdirs();

再执行文件上传操作,就是得到Part对象

// 执行文件上传操作
Part part = request.getPart("file");

然后获取上传文件的文件名

//获取文件名称
String disposition = part.getHeader("Content-Disposition");
String filename = disposition.split("[;]")[2];
filename = filename.substring(filename.indexOf("\"") + 1, filename.length() - 1);

由于不能直接获取文件名,所以就要自己解析文件名了.这个步骤就要用到上面那个用红色圈起来的东西了.我们首先得到http信息头下面的Content-Disposition信息.就是下面用红色圈起来的文字了.这是稳定规定的名字,所以直接调用就好
这里写图片描述

String disposition = part.getHeader("Content-Disposition");

disposition 字符串得到的就是form-data; name="file"; filename="Snipaste_2017-09-11_15-56-46.png"这个内容
所以就先将他用分号分隔开得到三个字符串文件名在第三个字符串里面,所以下标为2(数组技术从0开始)值为filename="Snipaste_2017-09-11_15-56-46.png"(filename前面是还有一个空格,但是在这里并不重要,只是提一下)
然后提取文件名字符串就是定位第一个引号后一位到结尾前一个位就好.最后的到的filename才是完整的文件名.

最后当然是将上传的文件写到磁盘

part.write(path + File.separator + filename);

完整代码

package com.wanli;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
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;

@WebServlet("/fileUpdate.do")
@MultipartConfig
public class FileUploadDemo extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 存放文件目录
        String path = "D:/Projects Files/images";
        File file = new File(path);
        if (!file.exists())
            file.mkdirs();
        // 执行文件上传操作
        Part part = request.getPart("file");
        // 获取文件名称
        String disposition = part.getHeader("Content-Disposition");
        String filename = disposition.split("\\;")[2];
        filename = filename.substring(filename.indexOf("\"") + 1, filename.length() - 1);
        part.write(path + File.separator + filename);
    }
}

最后重启下服务器再次尝试上传文件,然后查看D:/Projects Files/images 是否上传成功
当然这是最简单的上传文件操作了,如果要限制文件上传个数,大小就要到@MultipartConfig
注解里面设置了@MultipartConfig(maxFileSize = 1024 * 1024 * 3)限制文件上传大小为3M
设置上传文件个数为两个@MultipartConfig(maxRequestSize = 2),等等操作.
上面上传文件的代码其实还是很少的了.如果读者发现文章中有纰漏的地方希望能够指出来,谢谢!!

  • 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、付费专栏及课程。

余额充值