Vue使用vue-image-crop-upload实现图片的上传与显示

目录

效果展示

具体操作

1.使用npm下载vue-image-crop-upload

2.前端代码分析

3.后端代码分析


效果展示

修改头像前

Vue使用vue-image-crop-upload实现图片的上传与显示_第1张图片Vue使用vue-image-crop-upload实现图片的上传与显示_第2张图片

Vue使用vue-image-crop-upload实现图片的上传与显示_第3张图片

 修改后

Vue使用vue-image-crop-upload实现图片的上传与显示_第4张图片

这里说明一下这个组件可以让我们在修改头像的时候可以进行裁剪的操作。

具体操作

1.使用npm下载vue-image-crop-upload

npm i babel-polyfill -S
npm i vue-image-crop-upload -S

2.前端代码分析

(1)imagecropperShow = true 是开启组件的元素,imagecropperShow值为false是关闭,在上传图片成功后,要将这个值设置成false来关闭组件。

(2)图片的显示,可以在cropSuccess方法中将img设置成上传的图片, this.avatar = imgDataUrl;

3.后端代码分析

(1)在yml中配置Springboot项目的虚拟路径

#文件上传的位置
file:
  ###静态资源对外暴露的访问路径
  staticAccessPath: /api/file/**
  ###静态资源实际存储路径
  uploadFolder: E:/项目/score/doc/

(2)配置类

/**
 * 文件下载配置虚拟路径,保存在指定的文件下
 */
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Value("${file.staticAccessPath}")
    private String staticAccessPath;
    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);
    }
}

 (3)后端Controller

@Slf4j
@RestController
@RequestMapping
public class UploadController {

    @Value("${file.uploadFolder}")
    private String baseLocation;

    /**
     * 文件上传
     * @param req
     * @return
     */
    @PostMapping("/upload")
    public R upload(MultipartHttpServletRequest multipartHttpServletRequest, HttpServletRequest req){
        //得到传过来的文件
        Map files = multipartHttpServletRequest.getFileMap();
        //得到头像文件
        MultipartFile file = files.get("avatar");
        if(!file.isEmpty()){
            System.out.println("文件不为空");
            //原始文件名
            String originFileName = file.getOriginalFilename();
            //截取原始文件名的后缀
            String suffix = originFileName.substring(originFileName.lastIndexOf('.'));
            //使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
            String fileName = UUID.randomUUID().toString().replace("-","") +suffix;
            //创建一个目录对象
            File dir = new File(baseLocation);
            //判断basePath是否存在
            if(!dir.exists()){
                //如果不存在,就创建
                dir.mkdirs();
            }
            try {
                //转存文件到达指定位置
                file.transferTo(new File(dir,fileName));
            } catch (IOException e) {
                e.printStackTrace();
                //这里的MessageNews.MESSAGE_FAIL_UPLOAD_FAIL是一个提示消息,上传文件失败
                return R.error(MessageNews.MESSAGE_FAIL_UPLOAD_FAIL);
            }
            String address = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + "/api/file/" + fileName ;
            //上传地址在浏览器中打开的路径
            System.out.println(address);
            return R.success(fileName);
        }
        return R.error(MessageNews.MESSAGE_FAIL_UPLOAD_FAIL);
    }
}

address这里打印出来的网址在浏览器中能打开,并且是你上传的图片,就说明你后端配置好了,这里说明一下问我这是完成了图片的上传和显示没有保存在数据库中,这里要保存address的值进数据库就行了。

你可能感兴趣的:(vue.js,javascript,前端,spring,boot)