存在問題:以前的老項目打的是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,成功讀取圖片