spring boot 简单实现图片上传(数据库存储路径)与访问

1、通过Url访问存储于服务器本地的图片文件。

通过配置静态资源映射的方案就可以了(个人理解,不一定准确)

@Configuration
public class WebConfigurer extends WebMvcConfigurationSupport {    
@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //上传的图片在E盘Projects目录下,访问路径如:http://localhost:8080/pic/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg
        //其中pic表示访问的前缀。"file:E:\\Projects\\img_example\\"是文件真实的存储路径
        registry.addResourceHandler("/pic/**").addResourceLocations("file:E:\\Projects\\img_example\\"); //20190929访问本地文件
    }
}

这样通过访问 localhost:8080/pic/20190927\cd0f3554-2358-407a-b594-3845c51de983.png,就可以直接获取图片并显示在浏览器中。

成功示例见下图。

spring boot 简单实现图片上传(数据库存储路径)与访问_第1张图片

虽然没有特殊配置,但是发现当访问的文件不存在时,还是有自动的返回信息的。如下图

spring boot 简单实现图片上传(数据库存储路径)与访问_第2张图片

2、将图片上传到服务器并在数据库中存储图片路径,便于后期访问

Controller中

@RequestMapping("/add")
    public RetResult addWithPic(@RequestParam(required = false, value = "title") String title, @RequestParam(value = "user_id") String user_id,
                                             @RequestParam(value="description",required = false) String description,
                                             @RequestParam(value = "longitude") Double longitude, @RequestParam(value = "latitude") Double latitude,
                                             @RequestParam(value="type_id") int type_id, @RequestParam(value = "file", required = false) MultipartFile[] files) throws Exception {
        Information information = new Information();
        information.setTitle(title);
        information.setUser_id(user_id); //这里用电话号来代表用户id
        information.setDescription(description);
        information.setLongitude(longitude);
        information.setLatitude(latitude);
        information.setTime(new Date());
        information.setType_id(type_id);

        if(files != null && files.length > 0){ //当文件参数不是null的时候,再进行文件处理,否则会报错
            String fileNameStr = UploadActionUtil.uploadFileByFiles(files);
            information.setPicture(fileNameStr); //在这里记录了图片的路径,这样就实现了在数据库里记录图片路径,只需要在数据访问层将该information存进相应的表格中
        }
        //验证手机号码格式是否正确
        if(user_id.length() != 11){
            return RetResponse.makeFailRsp("添加失败,手机号须为11位", null);
        }
        else if(! CommonUtil.verifyPhone(user_id)){
            return RetResponse.makeFailRsp("添加失败,该手机号格式错误", null);
        }
        //要求用户信息必须已在用户表中(类似于注册)存在,才能执行添加操作 20190920去除用户外键约束
//        if(userService.selectById(user_id) == null){
//            return RetResponse.makeFailRsp("添加失败,该用户手机号未在系统中登记", null);
//        }
        int add_res = informationService.insert(information);
        if(add_res > 0){
            information = informationService.selectById(id);
            return RetResponse.makeSuccessRsp("添加成功",information);
        }
        else{
            return RetResponse.makeFailRsp("添加失败", null);
        }
    }
//下面是uploadFileByFiles方法
public static String uploadFileByFiles(MultipartFile[] files) throws Exception {
        String fileNameStr = "";
        for(int i = 0; i < files.length; i++){ //对所有文件依次获取
            // 取得上传文件
            if (files[i] != null) {
                // 取得当前上传文件的文件名称
                String myFileName = files[i].getOriginalFilename();
                // 如果名称不为“”,说明该文件存在,否则说明该文件不存在
                if (myFileName.trim() != "") {
                    String fileTyps = myFileName.substring(myFileName.lastIndexOf("."));
                    // String tempName="demo"+fileTyps;
                    String tempName = UUID.randomUUID().toString() + fileTyps;
                    // 创建文件夹
                    String folderName = folderName();
                    String folderPath = CommonUtil.SAVEFILEPATH + File.separator + folderName;
                    File fileFolder = new File(folderPath);
                    if (!fileFolder.exists() && !fileFolder.isDirectory()) {
                        fileFolder.mkdir();
                    }
                    //创建文件
                    File uploadFile = new File(folderPath + File.separator + tempName);
                    //上传文件
                    files[i].transferTo(uploadFile);
                    if(fileNameStr == ""){
                        fileNameStr = folderName + File.separator + tempName;
                    }
                    else{
                        fileNameStr = fileNameStr + ";" + folderName + File.separator + tempName;
                    }
                }
            }
        }
        return fileNameStr;
    }

    /**
     * 当前日期当文件夹名
     *
     * @return
     */
    public static String folderName() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String str = sdf.format(new Date());
        return str;
    }

文件上传测试如下图:

spring boot 简单实现图片上传(数据库存储路径)与访问_第3张图片

 

你可能感兴趣的:(spring,boot)