2020-11-30

修改图片(做了文件格式限制以及文件大小限制):

1.1 文件格式限制代码

String suffix = fileNameArr[fileNameArr.length-1];
                    //.sh .php 过滤掉不符合要求的文件
                    if (!suffix.equalsIgnoreCase("png")&&
                            !suffix.equalsIgnoreCase("jpg")&&
                            !suffix.equalsIgnoreCase("jpeg")){
                        IMOOCJSONResult.errorMsg("图片格式不正确");
                    }

1.2 静态资源文件映射

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    //实现静态资源的映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")//所有类型资源都可以映射
        .addResourceLocations("file:\\E:\\workspaces\\images\\")//映射本地静态资源:操作系统中的一个目录
        .addResourceLocations("classpath:META-INF/resources/")//这是映射swagger2
        ;
    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

//windows下文件目录格式
file.imgUserFaceLocation=\\workspaces\\images\\foodie\\faces
file.imageServerUrl=http://localhost:8088/foodie/faces

 2.3  文件大小限制

//限制文件大小
spring:
  servlet:
    multipart:
      max-file-size: 512000     # 文件上传大小限制为500kb
      max-request-size: 512000  # 请求大小限制为500kb

//捕获文件上传异常
@RestControllerAdvice
public class CustomExceptionHandler {
    //FileUploadBase$SizeLimitExceededException
    //上传文件超过500k捕获这个异常
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public IMOOCJSONResult handlerMaxUploadFile(MaxUploadSizeExceededException exception){
        return IMOOCJSONResult.errorMsg("文件上传大小不能超过500k,请压缩图片或者降低图片质量再上传");
    }

 

2.0 文件上传逻辑部分所有代码

@Autowired
    private FileUpload fileUpload;
    @ApiOperation(value = "修改用户头像", notes = "修改用户头像",httpMethod = "POST")
    @PostMapping("uploadFace")
    public IMOOCJSONResult uploadFace(
            @ApiParam(name = "userId",value = "用户id",required = true)//必须要传的参数
            @RequestParam String userId,
            @ApiParam(name = "file",value = "用户头像",required = true)
                    MultipartFile file,
            HttpServletResponse response,
            HttpServletRequest request){
        //.sh .php 过滤掉不符合要求的文件
        //头像保存地址
//        String fileSpace = IMG_USER_FACE_LOCATION;
        String fileSpace = fileUpload.getImgUserFaceLocation();
        String imageServerUrl = fileUpload.getImageServerUrl();
        //在路径上为每一个用户增加一个userId,用于区分不同用户上传
        String uploadPathPrefix = File.separator+userId;

        //开始文件上传
        if (file!=null){
            FileOutputStream fileOutputStream = null;
            try {
                //获得文件上传的文件名称
                String fileName = file.getOriginalFilename();
                if (StringUtils.isBlank(fileName)){
                    IMOOCJSONResult.errorMsg("文件名不能为空");
                }else{
                    //文件重命名 yuan-face.png - >"yuan-face","png"
                    String fileNameArr[] = fileName.split("\\.");
                    //获取文件的后缀名
                    String suffix = fileNameArr[fileNameArr.length-1];
                    //.sh .php 过滤掉不符合要求的文件
                    if (!suffix.equalsIgnoreCase("png")&&
                            !suffix.equalsIgnoreCase("jpg")&&
                            !suffix.equalsIgnoreCase("jpeg")){
                        IMOOCJSONResult.errorMsg("图片格式不正确");
                    }
                    //文件名称重组,覆盖式上传;增量式:额外拼接时间
                    String newFileName = "face-"+userId+"."+suffix;
                    //face-(userId).png
                    //上传的头像最终保存的位置
                    String finalFacePath=fileSpace+uploadPathPrefix+File.separator+newFileName;
                    //用于提供给web服务的地址
                    uploadPathPrefix =("/" +userId+"/"+ newFileName);
//                    System.out.println(finalFacePath);
                    File outFile = new File(finalFacePath);
                    if (outFile.getParentFile()!=null){
                        //创建文件夹
                        outFile.getParentFile().mkdirs();
                    }
                    //文件输出保存到目录
                    fileOutputStream = new FileOutputStream(outFile);
                    InputStream inputStream =  file.getInputStream();
                    IOUtils.copy(inputStream,fileOutputStream);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (fileOutputStream!=null) {
                    try {
                        fileOutputStream.flush();
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }else{
            return IMOOCJSONResult.errorMsg("文件不能为空");
        }
        //更新用户头像到数据库
        //由于浏览器存在缓存的情况,所以这里我们需要加上时间戳来保证更新后的图片可以及时刷新显示
        String webFaceUrl = imageServerUrl+uploadPathPrefix+"?t="+ DateUtil.getCurrentDateString("yyyyMMddHHmmss");
        System.out.println(webFaceUrl);//测试
        Users userResult = centerUserSrvice.updateUserFace(userId,webFaceUrl);
        CookieUtils.setCookie(request,response,"user",
                JsonUtils.objectToJson(userResult),true);
        return IMOOCJSONResult.ok();
    }

# 技术博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值