SpringBoot-本地上传图片(亮点:将上传图片的存放路径设置在application.properties文件中,可以灵活地设置路径)

第一步:在application.properties文件中设置上传图片的存放路径
在这里插入图片描述
第二步:创建Constant常量类,存放上传路径

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 存放常量
 */
@Component
public class Constant {
    //public static final String IMOOC_MALL_USER="imooc_mall_user";//用户存放在session中的key

    //public static final String SALT="sdcrvgtn-2k";//MD5加密的盐值
    
    //@Value("${file.upload.dir}")  //由于下面的这个属性是静态的,不能直接使用@Value注解,需要使用set方法设置
    //public static String FILE_UPLOAD_DIR;//设置上传图片的存储路径
   
   
    public static String FILE_UPLOAD_DIR;//设置上传图片的存储路径
    @Value("${file.upload.dir}") //需要spring注入这个value,因此需要创建bean,使用@component注解
    public void setFileUploadDir(String fileUploadDir) {
        FILE_UPLOAD_DIR = fileUploadDir;
    }
}

第三步:编写上传代码

    @PostMapping("/admin/upload/file")
    @ApiOperation("上传图片")
    public ApiRestResponse upLoad(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) {
        //获取上传文件的名字
        String fileName = file.getOriginalFilename();
        //获取上传文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //生成文件名称UUID
        UUID uuid = UUID.randomUUID();
        //生成新的文件名称
        String fileNewName = uuid.toString() + suffixName;
        //上传图片的存放目录
        File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);
        //上传图片的存放路径
        File destFile = new File(Constant.FILE_UPLOAD_DIR + fileNewName);
        //判断目录是否存在
        if (!fileDirectory.exists()) {
            if (!fileDirectory.mkdir()) {//目录创建失败
                throw new ImoocMallException(ImoocMallExceptionEnum.MKDIR_FAILED);
            }
        }
        try {
            file.transferTo(destFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            //httpServletRequest.getRequestURL():http://localhost:8083
            return ApiRestResponse.success(getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/images/"+ fileNewName);
        } catch (URISyntaxException e) {
            return ApiRestResponse.error(ImoocMallExceptionEnum.UPLOAD_FAILED);
        }
    }
    //获取URI:http://localhost:8083
    private URI getHost(URI uri) {
        URI effectiveURI;
        try {
            effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(),
                    null, null, null);
        } catch (URISyntaxException e) {
            effectiveURI = null;
        }
        return effectiveURI;
    }

测试:
在这里插入图片描述
在这里插入图片描述
第四步:通过http://localhost:8083/images/3533dbe7-b108-4019-9845-cc428a9c8095.jpg访问图片
发现不能进行查看
在这里插入图片描述
那是因为没有设置静态资源映射路径,静态资源到本地目录的映射,能够实现上传图片进行回显

创建配置文件:

import com.imooc.mall.common.Constant;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 描述:     配置地址映射
 */
@Configuration
public class ImoocMallWebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //addResourceLocations 指的是文件放置的目录,addResoureHandler 指的是对外暴露的访问路径
        registry.addResourceHandler("/images/**")
                .addResourceLocations("file:" + Constant.FILE_UPLOAD_DIR);
        //registry.addResourceHandler("swagger-ui.html").addResourceLocations(
         //       "classpath:/META-INF/resources/");
        //registry.addResourceHandler("/webjars/**").addResourceLocations(
        //        "classpath:/META-INF/resources/webjars/");
    }
}

成功访问
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老衲只用阿道夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值