springBoot打成jar包生成外部文件夾上傳圖片

存在問題:以前的老項目打的是war包,tomcat啓動解壓以後放圖片的文件夾可以放在項目裏。通過域名加路徑的形式可以訪問到,但是現在使用springBoot打成jar包,內置tomcat,通過命令運行的形式導致無法在項目中放置存放圖片的文件夾

於是我們就使用動態在jar包外生成文件夾,將圖片上傳到外部文件夾中
不多廢話,上代碼:
用到的一些服務器(域名用你自己的)上的路徑

 	//服務器訪問位置 (服務器上獲取圖片接口)
    public static final String path = "http://m.nongjike.cn/appManager/img/getImg";
    //服務器存儲圖片位置(絕對路徑)
    public static final String imgpath = "D:/appManager/file/image/upload";
    //生產環境默認圖片
     public static final String localpath = "http://m.nongjike.cn/appManager/img/getImg/start.jpg";

1.首先對啓動類做一些修改,主要是實現WebMvcConfigurer ,賦予外部文件夾讀寫權限

package com.mtnz.njk;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
@EnableScheduling // 開啓定時任務
@EnableTransactionManagement // 開啓事務支持
// @EnableEurekaServer

// @EnableDiscoveryClient //啓用服務註冊與發現
// @EnableFeignClients //啓用Feign客戶端
@EnableCaching // 開啓緩存
public class AppManager extends SpringBootServletInitializer implements WebMvcConfigurer {
    // 在啓動類中添加過濾器
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/File/**")
                .addResourceLocations("file:File/");
    }

    public static void main(String[] args) {
        SpringApplication.run(AppManager.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(AppManager.class);
    }


}

2.上傳圖片代碼,此處是service層主要代碼

  /**
     * 保存圖片
     *
     * @param file
     * @param request
     * @return
     */
	private static String UPLOAD_PATH = "File/image/upload";
	
    @Transactional
    public ResponseResult saveImg(MultipartFile file, HttpServletRequest request) throws Exception {
        if (file != null && !"".equals(file)) {

            String name = file.getOriginalFilename();
            System.out.println(name);

            InputStream inputStream = file.getInputStream();
            Path directory = Paths.get(UPLOAD_PATH);
            if (!Files.exists(directory)) {
                Files.createDirectories(directory);
            }
            Files.copy(inputStream, directory.resolve(name));
            // 將信息放入數據庫中
            String id = IdUtil.simpleUUID();

            StartImgEntity startImgEntity = new StartImgEntity();
            startImgEntity.setStartImgId(id);
            startImgEntity.setStartImgName(name);
            startImgEntity.setCreateTime(DateUtil.now());
            startImgEntity.setStartImgUrl(FileUtil.path + "/" + name);
            int i = startImgManageMapper.insertSelective(startImgEntity);
            if (i > 0)
                return new ResponseResult(ResponseMessage.OK);
            return new ResponseResult(ResponseMessage.FAIL);
        }
        return new ResponseResult(ResponseMessage.FAIL);
    }

3.讀取文件代碼

 /**
     * 讀取圖片
     *
     * @param response
     * @param name
     * @throws Exception
     */
    @GetMapping("/getImg/{name}")
    public void getImage(HttpServletResponse response, String name) throws Exception {
        response.setContentType("image/jpeg;charset=utf-8");
        response.setHeader("Content-Disposition", "inline; filename=girls.png");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(Files.readAllBytes(Paths.get(UPLOAD_PATH).resolve(name)));
        outputStream.flush();
        outputStream.close();
    }

4.項目打成jar包,放在服務器上,執行java -jar 命令,一通操作之後,訪問上傳圖片接口saveImg

在這裏插入圖片描述上傳成功,數據庫中新增一條信息
在這裏插入圖片描述
調用新增信息的url,成功讀取圖片
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章