SpringBoot打成Jar包,访问本地其他路径的静态资源

SpringBoot打成Jar包,访问本地其他路径的静态资源

第一种方式, 增加配置即可

在application.yml中增加配置:

# 属性: spring.web.resources.static-locations
# 该属性的默认值如下:   -- [鼠标放在该属性上可以看到提示信息的]
# classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/

# 【实际测试通过_Zhaof】
# 本例增加了三个路径:
# 	 一个相对路径: file:/static/   
#		【注意】建议使用--绝对路径--[变量路径的方式,最好也配置成绝对路径],
#				当Java -jar指令不在Jar包目录执行时[java -jar执行路径和Jar包一致时,都可以],
#				相对路径在Jar包下的就找不到了
#    一个绝对路径: file:D:/works/MyFileData/
#    一个变量路径: file:${CustomInfo.PdfFiles}/
# 解决服务打成Jar包时,http访问指定路径的静态资源问题

CustomInfo:
  PdfFiles: D:/Pdfs

spring:
  web:
    resources:
      static-locations: classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/, file:/static/, file:D:/works/MyFileData/, file:${CustomInfo.PdfFiles}/

# 配置好后,在Jar包路径下/static/,D:/works/MyFileData/的静态资源,均可以直接访问了
# 如:  test.txt在 Jar包/static/ 路径下
http://localhost:8080/test.txt
# 如:  girl.jpg在 D:/works/MyFileData/ 路径下
http://localhost:8080/girl.jpg
# 如:  boy.doc在变量路径: ${CustomInfo.PdfFiles} 即  D:/Pdfs 下
http://localhost:8080/boy.doc

第二种方式: Controller中读取文件并返回

import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
 
@Controller
@RequestMapping(value = "/image")
public class ImageController {

	// produces 需要指定类型, 否则返回一堆乱码 ,具体可参见MediaType的枚举值
	//  网页,    produces = MediaType.TEXT_HTML
	//  PDF,	  produces = MediaType.APPLICATION_PDF_VALUE
    @RequestMapping(value = "/get",produces = MediaType.IMAGE_JPEG_VALUE)  // 图片资源
    @ResponseBody
    public byte[] getImage() throws IOException {
    	//读取本地文件资源 ,建议先检查文件是否存在哦
        File file = new File("D:/test.jpg");
		// 将资源写入bytes字节数组并返回即可
        FileInputStream inputStream = new FileInputStream(file);
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes, 0, inputStream.available());
        return bytes;
    }
}

第二种方式的实例: 自己开放浏览器访问PDF的接口

Service层:
@Override
    public byte[] GetCfdPdfShow(String cfsb) throws Exception {
        //先查询该处方号是否已经生成过
        ZhybPdfCfd zhybPdfCfdInfo = zhybPdfCfdDao.selectById(cfsb);
        if(zhybPdfCfdInfo == null ){
            // 未生成过PDF处方文件,则检查该处方号是否有效!
            ZhybCfdMainInfo zhybCfdMainInfo = zhybCfdMainDao.selectById(cfsb);
            if(zhybCfdMainInfo==null){
                throw new Exception("无效的外配处方识别号: [" + cfsb + "]," +
                        "请核对该处方识别号是否正确或有效!!!");
            }
            //数据库记录不存在,则先生成
            generateCfdPdf(cfsb,false);
            // 重新访问数据库,获取到表中相关信息
            zhybPdfCfdInfo = zhybPdfCfdDao.selectById(cfsb);
        }

        String pdfFile = zhybPdfCfdInfo.getPdf_pathfile();
        boolean pdfExist = FileUtil.exist(pdfFile);
        if (!pdfExist){
            // 数据库记录存在,但Pdf文件资源不存在了,可能被谁手动删除文件,则重新生成
            generateCfdPdf(cfsb,true);  // 第二个参数True, 表示覆盖重新生成
            // 重新访问数据库,获取到表中相关信息
            zhybPdfCfdInfo = zhybPdfCfdDao.selectById(cfsb);
            // 获取重新生成的Pdf文件目录
            pdfFile = zhybPdfCfdInfo.getPdf_pathfile();
            pdfExist = FileUtil.exist(pdfFile);
            if (!pdfExist) {
                // 重新生成后,文件依然不存在
                throw new Exception("根据处方识别号: " + cfsb + " 无法获取到有效的Pdf文件!");
            }
        }
        //读取本地文件资源 ,建议先检查文件是否存在哦
        File file = new File(pdfFile);
        // 将资源写入bytes字节数组并返回即可
        FileInputStream inputStream = new FileInputStream(file);
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes, 0, inputStream.available());
        return bytes;
    }
Controller层
    // 浏览器访问, 根据处方识别号显示对应的 Pdf处方单
    @GetMapping(value = "/GetCfdPdf/Show/{cfsb}",produces = MediaType.APPLICATION_PDF_VALUE)
    @ResponseBody
    public byte[] GetCfdPdfShow(@PathVariable String cfsb) throws IOException {
        return cfdPdfService.GetCfdPdfShow(cfsb);
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值