实现图片上传(前后端)

前端代码:

//图片上传
        function uploadImage(fileDom) {
            //获取文件
            var file = fileDom.files[0];
            //判断类型
            var imageType = /^image\//;
            if (file === undefined || !imageType.test(file.type)) {
                $("#btn-ok").unbind("click").click(function () {
                    $("#modalDiv").modal("hide");
                });
                $(".modal-body").text("请选择图片!");
                $('#modalDiv').modal();
                return;
            }
            //判断大小
            if (file.size > 512000) {
                $("#btn-ok").unbind("click").click(function () {
                    $("#modalDiv").modal("hide");
                });
                $(".modal-body").text("图片大小不能超过500K!");
                $('#modalDiv').modal();
                return;
            }
            //清空值
            $(fileDom).val('');
            var formData = new FormData();
            formData.append("file", file);
            //上传图片
            $.ajax({
                url: "/admin/updateImageByAdminId",
                type: "post",
                data: formData, //注意要使用formData
                contentType: false,
                processData: false,
                dataType: "json",
                mimeType: "multipart/form-data",
                success: function (data) {
                    $(".loader").css("display", "none");
                    console.log(data)
                    if (data.code === 0) {
                        $("#admin_profile_picture").addClass("new").attr("src", "http://localhost:9092/images/item/adminProfilePicture/" + data.data.img); //如果这个图片无法显示,是因为后端图片回显的问题
                    } else {
                        alert("图片上传异常!");
                    }
                },
                beforeSend: function () {
                    $(".loader").css("display", "block");
                },
                error: function () {

                }
            });
        }

后端代码:

@PostMapping("updateImageByAdminId")
    @ResponseBody
    public R updateImageByAdminId(HttpServletRequest request, MultipartFile file){
        Admin admin = (Admin) request.getSession().getAttribute("admin");
        String filename = file.getOriginalFilename();
        log.info("文件上传的名称:{}", filename);
        filename = UUID.randomUUID()+filename.substring(filename.lastIndexOf("."));
        log.info("文件的新名称:{}",filename);
        //文件上传

        String filePath = System.getProperty("user.dir")+
                File.separatorChar+"src"+File.separatorChar+"main"+
                File.separatorChar+"resources"+File.separatorChar+"static"+
                File.separatorChar+"images"+File.separatorChar+"item"+
                File.separatorChar+"adminProfilePicture"+File.separatorChar+filename; //前端传图片存放在后端的具体位置(如下图所示)
        log.info("文件存放路径:{}",filePath);
        try {
            file.transferTo(new File(filePath));
        } catch (IOException e) {
            throw new RuntimeException("文件上传失败");
        }
        //实现个人信息的更新
        //设置用户的头像地址
        admin.setAdminProfilePictureSrc(filename);
        int result = adminService.updateImageByAdminId(admin);
        if(result>0){
            return R.ok().data("msg"," ").data("img",filename);
        }
        return R.error().data("msg","更新失败");
    }

 解决图片回显问题:

只需在后端添加一个config类即可解决图片回显的问题

@SpringBootConfiguration
public class MyMvcConfig implements WebMvcConfigurer {
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {

		//registry.addResourceHandler(相对路径)
		//addResourceLocations(绝对路径)
		//System.getProperty("user.dir") 获取当前项目的绝对路径

		//获取文件的真实路径
		String path = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\item\\adminProfilePicture\\";
		String path1 = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\item\\productSinglePicture\\";
		String path2 = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\item\\productDetailsPicture\\";
		String path3 = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\item\\categoryPicture\\";
		String path4 = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\item\\userProfilePicture\\";
		//映射静态资源路径:去static目录下资源,所在在页面上就可以不写static
		registry.addResourceHandler("/images/item/adminProfilePicture/**","/static/**").addResourceLocations("file:" + path);
		registry.addResourceHandler("/static/**","/images/item/productSinglePicture/**").addResourceLocations("file:" + path1);
		registry.addResourceHandler("/static/**","/images/item/productDetailsPicture/**").addResourceLocations("file:" + path2);
		registry.addResourceHandler("/static/**","/images/item/categoryPicture/**").addResourceLocations("file:" + path3);
		registry.addResourceHandler("/static/**","/images/item/userProfilePicture/**").addResourceLocations("file:" + path4);
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值