文件上传案例(java)

/**
 * @Author: dgk1024
 * @Date: 2020/7/21-16:39
 * @Description:上传文件示例
 */
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.text.SimpleDateFormat;
import java.util.Date;

@MultipartConfig/**@MultipartConfig标注才能使用getPart()相关API,否则会返回null。*/
@WebServlet("/aceppimg_Servlet")
public class aceppimg_Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码,否则上传文件中文名会乱码
        request.setCharacterEncoding("utf-8");
        /**
         * upload.jsp
         * formData.set("file", file.files[0]);
         */
        Part part = request.getPart("file");
        String head = part.getHeader("Content-Disposition");
        String filename = head.split("filename=\"")[1].replace("\"","");
        System.out.println(head);
        //获取文件名
        System.out.println(filename);
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
        String strCurrentTime = df.format(new Date());
        //防止文件重名
        filename = strCurrentTime+filename;

        BufferedInputStream in = new BufferedInputStream(part.getInputStream());
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("D:\\流练习文件夹\\123123123\\"+filename));
        byte[] b = new byte[1024];
        int length = -1;
        while((length = in.read(b))!=-1) {
            out.write(b, 0, length);
        }
        in.close();
        out.close();
    }
}
```网页端jsp
<%--
  Created by IntelliJ IDEA.
  User: 李轩
  Date: 2020/7/21
  Time: 16:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
    <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
    <title>Title</title>
    <style>
        .progress {
            display: none;
        }
    </style>
</head>
<body>
<div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="100"
         style="min-width: 2em; width: 0%;">
        0%
    </div>
</div>
<input type="file" id="file">
<input type="button" value="上传文件" id="btn">
</body>
<script>
    var file = document.getElementById("file");
    var btn = document.getElementById("btn");
    btn.onclick = () => {
        //展示进度条
        document.getElementsByClassName("progress")[0].style.display = "block";

        console.dir(file.files[0]);
        let formData = new FormData();
        formData.set("file", file.files[0]);
        let xhr = new XMLHttpRequest();
        //初始化HTTP 请求参数(未发送)
        xhr.open("POST", "${pageContext.request.contextPath}/aceppimg_Servlet");
        //上传状态
        xhr.upload.onprogress = (evt) => {
            //进度条
            document.getElementsByClassName("progress-bar")[0].innerHTML = ((evt.loaded / evt.total * 100).toFixed(2) + "%");
            document.getElementsByClassName("progress-bar")[0].width = ((evt.loaded / evt.total * 100).toFixed(2));
        };
        //发送formData
        xhr.send(formData);
        console.log(formData);
        //当状态发生改变时执行
        xhr.onreadystatechange = () => {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                //隐藏进度条
                document.getElementsByClassName("progress")[0].style.display = "none";
            }
        }
    };
</script>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值