文件上传1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
    <style>
        .myimg{
            width: 100px;
            height: 100px;
            border: 1px solid;
        }
    </style>
</head>
<body>
<!--/Manager/test-->
<form method="post" action="" enctype="multipart/form-data">
    <input type="file" id="myfile" name="myfile" onchange="getimgfile()"/><br/>
    <img id="myimg" class="myimg" src="img/defaultImg.png"/><br/>
    <input type="submit" name="提交">
</form>
</body>
<script>
    function getimgfile(){
        //file框中的files属性可以获得指定文件列表
        console.log(document.getElementById("myfile").files[0]);
        //发文件
        //1.把文件数据装进表单
        //2.把表单当作请求发送给后端,并且设置请求头类型,告诉后端该文件以字节形式传输

        //1.1创建表单容器
        let form = new FormData;
        //1.2 将传输文件追加进表单容器中(键值对格式 键相当于name属性)
        form.append("myfile",document.getElementById("myfile").files[0]);

        //2.1 使用axios发送请求(post),并设置请求头类型
        axios.post("/Manager/test",form,{headers: {'Content-Type': 'multipart/form-data'}})
        .then(resp=>{
            //将后端回传过来的文件路径覆盖到图片预览路径上
            document.getElementById("myimg").src = resp.data.imgsrc;
        })
    }
</script>
</html>
@WebServlet("/test")
@MultipartConfig   //有了这个字节服务器就会对文件字节流进行解析了
public class Upload extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过name属性定位到文件
        Part myfile = req.getPart("myfile");//解析到part
        ServletContext servletContext = req.getServletContext();
        String realPath = servletContext.getRealPath("/");
        String name = "file/";
        String filename = myfile.getSubmittedFileName();//原文件名
        System.out.println(realPath+name+filename);
        //写入文件到指定路径,带原文件名
        myfile.write(realPath+name+filename);

        //把传入的文件路径响应出去
        Map m = new HashMap(16);
        m.put("imgsrc",name+filename);
        String s = JSON.toJSONString(m);
        System.out.println(s);
        resp.getWriter().print(s);
    }
}

axios

//上传图片发送文件请求
		 myUpload(val){
			 console.log(val);//请求头对象,里面有需要的file属性
			 let myfile = val.file;
			 //创建form表单,把文件塞进去
			 let form = new FormData();
			 form.append("myfile",myfile);
			 this.$axios.post("http://localhost:8080/Manager/users/upload",form,{headers: {'Content-Type': 'multipart/form-data'}})
			 .then(resp=>{
				 console.log(resp);
				 //把回传的数据覆盖到原图片路径上
				 this.addform.headImg = resp.data.retData;
			 })
		 },

总结:
前:图片文件通过前端上传,把图片文件打包进form表单中,通过post请求发送到后端,此时需要设置请求头类型,指定 {‘Content-Type’: ‘multipart/form-data’}才能让服务器知道是字节流读取。
后:服务器用注解@MultipartConfig配置,利用该注解服务器就会对文件字节流进行解析了。
通过请求对象中的getpart方法传入文件name属性获得文件,
把获得的文件写进指定路径中(路径需要自己拼写,可以借助getservletcontext方法)
在这里插入图片描述

注意

servletContext.getRealPath(“参数”),传的这个参数可以拼接到真实路径之后

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值