前言:SpringBoot在服务器内上传文件,是临时文件,在重启时候会生成另外的目录,也就意味着原来上传的图片在重启后就访问不到了。

1.图片上传


@PostMapping("/upload")
    public CommonResult insertDbMsPhoto(@RequestPart("photos") MultipartFile[] photos,
                                        @RequestParam("mid") String mid,
                                        HttpServletRequest request){
try {
            if (photos.length > 0) {
                HashMap<String , String> hashMap = null;
                for (MultipartFile photo : photos) {
                    if (!photo.isEmpty()) {
                        hashMap = new HashMap<>();
                        String originalFilename = photo.getOriginalFilename();

                        String sufixPhoto = originalFilename.split("\\.")[1];
                        //拼接图片
                        String date = new SimpleDateFormat("yyyyMM").format(System.currentTimeMillis());
                        InputStream is = null;
                        OutputStream os = null;
                        //获得路径 本地路径
                        String filePath = request.getSession().getServletContext()
                                .getRealPath("/UploadFiles/db/photo/"+date+"/");
                        File file = new File(filePath);
                        if(!file.exists()){
                            //先创建该文件的所有上级目录
                            if (file.getParentFile().mkdirs())
                            {
                                try{
                                    log.info("创建了文件目录====================");
                                    //如果不存在就创建
                                    file.mkdir();
                                }catch (Exception e){
                                    e.printStackTrace();
                                }
                            }
                        }
                        //获得图片名称
                        String photoName = date + System.currentTimeMillis()+ "." + sufixPhoto;
                        log.info("图片被上传到了:{}",filePath+photoName);

                        try {
                            is = photo.getInputStream();
                            os = new FileOutputStream(new File(filePath+photoName));
                            FileCopyUtils.copy(is, os);
                        } catch (IOException e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                os.flush();
                                os.close();
                                is.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }

                        hashMap.put("ID",dbMsPhoto.getId());
                        hashMap.put("tips",dbMsPhoto.getTips());
                        hashMap.put("crtdt",dbMsPhoto.getCrtdt()+"");
                        hashMap.put("location",dbMsPhoto.getLocation());
                        hashMap.put("path",dbMsPhoto.getPath()+dbMsPhoto.getFname());
                        photoMap.add(hashMap);
                    }
                }
                //照片上传成功后返回照片信息到页面,用于更新页面显示的照片信息,便于删除是获取相关信息
            }
        }catch (Exception e){
            e.printStackTrace();
            return new CommonResult(StatusCode.SAVEFAIELD);
        }
        return new CommonResult(StatusCode.SAVESUCCESS);
     }
  • 这里是一段比较基本的图片上传代码了,当我们上传完图片之后发现打印的路径
    在这里插入图片描述

  • 路径为:C:\Users\user\AppData\Local\Temp\tomcat-docbase.8401.4328720503329668856\

我们顺着路径去查看这样的文件:

在这里插入图片描述

有大量的这种生成的tmp文件,当然图片也会被相应的保存在其中的某个文件路径下

2.上传完图片如何获取?

通过: http://localhost:8401/ + 拼接上自己的绝对路径(就是在上面获取的路径)+ 图片名即可以获取

在这里插入图片描述

  • 顺着返回的路径访问图片:

在这里插入图片描述
正常获取到

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐