Spring Boot 上传图片

1、前端采用的是ajax进行提交(FormData)

$(document).ready(function () {

        $("#submit").click(function () {

            var title = $("#title").val();
            var image = $("#image").val();
            var desc = $("#desc").val();

            var formData = new FormData();

            formData.append("title",title);
            formData.append("desc",desc);
            formData.append("file",$("#image")[0].files[0]);

            if('' == title || '' == image || '' == desc){
                alert("请将相关信息填写完整!");
            }else {
                $.ajax({
                   url: "uploadPhoto",
                   type: "post",
                   data: formData,
                   contentType:false,   // 不要设置Content-Type请求头
                   processData:false,   // 使数据不做处理
                   success: function (result) {
                        if(result.result == '3000'){
                            window.alert("上传成功");
                            window.location.href="toUploadPage";
                        }else {
                            window.alert("系统错误,上传失败!请稍后再试。");
                        }
                   }
                });
            }

        });

    });

2、Controller

public final static String UPLOAD_PATH_PREFIX = "static/photos/";

/**
     * 用户上传作品
     * @param photo
     * @param file
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "uploadPhoto",method = RequestMethod.POST)
    public Map<String,String> uploadPhoto(PhotoEntity photo, MultipartFile file, HttpServletRequest request) {

        //从session中获取当前用户信息
        UserEntity user = (UserEntity) request.getSession().getAttribute("user");
        String username = user.getUsername();
        Integer uid = user.getId();

        //上传图片
        //设置文件名  UUID避免重复
        String fileName = StringUtil.getUUID()+file.getOriginalFilename();

        //当前项目的位置
        String realPath = new String("src/main/resources/" + UPLOAD_PATH_PREFIX);

        //如果当前不存在该路径就创建路径
        File ph = new File(realPath);
        if(!ph.exists()){
            ph.mkdirs();
        }

        try {
            File file1 = new File(ph.getAbsolutePath()+File.separator + fileName);
            file.transferTo(file1);
        } catch (IOException e) {
            e.printStackTrace();
        }

        photo.setPath("photos/"+fileName);
        photo.setUid(uid);

        return photoService.uploadPhoto(photo);
    }

在这里插入图片描述
在ssm项目中使用的方法
在这里插入图片描述

这里如果还是按照这种方式写上传可以成功,但是重启服务器后图片将无法访问。

按照第一种方式上传图片就已经实现了,但是图片上传后不能通过url访问,需要重新启动项目才能访问。这是因为对服务器的保护措施导致的,服务器不能对外部暴露真实的资源路径,需要配置虚拟路径映射访问。
具体配置方法如下:

@Configuration
public class PhotoConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/photos/**").addResourceLocations("file:D:\\IDEACode\\photography\\src\\main\\resources\\static\\photos\\");
    }
}

addResourceHandler() 配置需要映射的文件夹
addResourceLocations() 配置文件夹在系统中的路径,要使用绝对路径

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值