springboot项目通过URL访问静态图片,本地文件夹下的图片!

本文介绍了两种在SpringBoot项目中读取并显示本地图片的方法。第一种适用于少量图片,直接将图片放置于项目静态文件夹,通过配置静态资源访问路径实现。第二种适合大量图片,通过指定本地图片资源位置,并在访问时结合端口号和图片位置进行展示。
该文章已生成可运行项目,

听说有的人看文章不关注,还有的人不点赞?
在这里插入图片描述

Springboot读取本地图片并显示

方法一

如果文件不多的话可以考虑将图片放到项目的静态文件夹中

在这里插入图片描述

在配置文件里加上

spring.mvc.static-path-pattern= /**

表示静态资源访问的格式

配置好之后启动程序,在地址栏中访问 localhost:8080/images/1.png

在这里插入图片描述
可以展示!

方法二

如果图片多的话就不可能一张一张的往里面放了!

所以下面还有一条命令!

spring.resources.static-locations=

在这里插入图片描述

表示图片资源在本地的位置

访问端口号+图片位置

在这里插入图片描述

在这里插入图片描述

也可以展示!

每日乞讨一波!

觉得有用的小哥哥小姐姐记得点赞加关注哟!
在这里插入图片描述

我是 丿烂人丶 一个为生活而努力奋斗的萌新,希望以后的路上,我们一起并肩前行!

本文章已经生成可运行项目
<think> 首先,用户的问题是基于Spring Boot项目,查询商品信息时通过URL展示本地图片的方法。我需要参考提供的引用,并结合系统指令来回答。 关键指令: - 所有行内数学表达式使用 `$...$` 格式(但在这个上下文中可能不需要)。 - 独立公式使用 `$$...$$` 格式(可能不适用)。 - LaTeX语法正确(确保无错误)。 - 使用中文回答。 - 生成相关问题。 - 在引用段落末尾添加引用标识。 - 结构清晰,帮助用户逐步解决问题。 用户提供的引用: - [^1]:关于商品数据入库的服务层实现,使用MyBatis-PlusSpring。 - [^2]:用户登录控制器实现。 - [^3]:防盗链技术,包括Referer校验签名校验。 - [^4]:前端表单提交,使用FormData上传图片。 - [^5]:商品服务器端调用,涉及限流等。 用户的问题焦点:如何在Spring Boot项目中,当查询商品信息时,通过URL展示本地存储的图片。 核心需求:图片存储在本地文件系统中,需要通过HTTP URL访问这些图片。 在Spring Boot中实现本地图片展示的常见方法: 1. **配置静态资源处理器**:Spring Boot可以配置静态资源目录,这样图片URL可以直接映射到文件系统路径。 2. **使用ResourceHandlerRegistry**:通过WebMvcConfigurer添加资源处理器。 3. **数据库存储图片路径**:商品信息存储在数据库中,图片路径作为字段存储;查询商品时返回图片URL,然后通过配置的静态资源访问。 步骤分解: 1. **存储图片**:当上传图片时(如引用[^4]所示),图片保存到本地目录,路径存储到数据库。 2. **配置静态资源访问**:Spring Boot默认处理静态资源(如resources/static),但可以自定义目录。 3. **生成图片URL**:在查询商品时,返回包含图片URL的响应。 4. **处理防盗链**:可选,参考引用[^3]。 从引用提取相关信息: - 引用[^1]:商品服务实体,但没有直接涉及图片。 - 引用[^2]:控制器处理登录,不直接相关。 - 引用[^3]:防盗链方案,可用于图片访问安全。 - 引用[^4]:前端上传图片,使用FormData。 - 引用[^5]:限流等,不直接相关。 实现方法: - **步骤1:上传图片**:引用[^4]显示了前端上传图片Spring Boot后端。后端需要处理保存图片本地并存储路径。 - **步骤2:配置静态资源**:在Spring Boot中,添加配置类来映射本地目录为静态资源。 - **步骤3:查询商品**:查询数据库获取商品信息,包括图片路径;返回URL。 - **步骤4:访问图片**:浏览器通过URL访问图片。 详细步骤: 1. **存储图片路径**:在商品实体(如Product)中添加图片路径字段,如imagePath。 2. **后端上传处理**:创建一个控制器方法处理图片上传,保存图片本地目录(如/uploads),并更新数据库。 3. **静态资源配置**:创建一个配置类实现WebMvcConfigurer,添加资源处理器映射URL路径到文件系统路径。 - 例如:registry.addResourceHandler("/uploads/**").addResourceLocations("file:/path/to/uploads/"); 4. **查询商品**:在查询商品的服务中,返回的Product对象包含完整的图片URL,如"http://domain.com/uploads/filename.jpg"。 5. **防盗链**:如果需要,参考引用[^3]实现签名或Referer校验。 回答结构: - **逐步解释**:清晰步骤。 - **代码片段**:提供Spring Boot配置控制器的关键代码。 - **中文**:全部内容用中文。 - **添加引用标识**:在引用相关部分的末尾添加引用标记。 - **生成相关问题**:在结束时添加相关问题。 生成相关问题: 基于用户的问题,可能的问题包括: 1. 如何配置Spring Boot静态资源映射? 2. 如何处理图片上传防盗链? 3. 如何优化图片加载性能? 完整回答大纲: 1. **介绍**:简要说明方法。 2. **存储图片**:描述如何上传图片并存储路径。 3. **配置静态资源**:代码示例。 4. **查询商品**:如何返回图片URL。 5. **防盗链(可选)**:简要提及。 6. **相关问题**。 确保LaTeX正确:在这个上下文中,可能不需要数学公式,如果需要变量等,使用$...$。 最终回答。 </think> ### Spring Boot项目查询商品信息时通过URL展示本地图片的实现方法 在Spring Boot项目中,通过URL展示本地图片的核心思路是:将图片存储在服务器的本地文件系统中,并配置静态资源映射,使图片可通过HTTP URL访问。查询商品信息时,从数据库中获取图片路径,生成完整的URL返回给前端。下面是详细的逐步实现方法: #### 1. **存储图片路径到数据库** - 在商品实体类中添加字段存储图片的相对路径(例如,`imagePath`)。 - 当用户上传图片时(如引用[^4]所示),后端接收文件并保存到本地目录(如`/uploads/products/`),同时将路径存入数据库。 - **关键步骤**: - 上传图片使用`MultipartFile`处理文件。 - 保存文件到指定目录(如项目根目录下的`uploads`文件夹)。 - 数据库仅存储路径(如 `/uploads/products/image1.jpg`)。 ```java // Product.java (实体类) public class Product { private Long id; private String name; private String imagePath; // 图片存储路径,如 "/uploads/products/image1.jpg" // 其他字段... } ``` ```java // ProductController.java (控制器) import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; @RestController @RequestMapping("/products") public class ProductController { @PostMapping("/upload") public String uploadImage(@RequestParam("file") MultipartFile file) throws IOException { if (file.isEmpty()) { return "文件为空"; } // 创建存储目录(如:项目根目录下的uploads) String uploadDir = System.getProperty("user.dir") + "/uploads/products/"; File dir = new File(uploadDir); if (!dir.exists()) { dir.mkdirs(); } // 保存文件 String fileName = file.getOriginalFilename(); String filePath = uploadDir + fileName; file.transferTo(new File(filePath)); // 返回相对路径(供数据库存储) return "/uploads/products/" + fileName; } } ``` - 前端上传参考引用[^4],使用FormData提交图片文件到后端。 #### 2. **配置静态资源映射** - Spring Boot默认不支持直接访问本地文件系统路径,需通过`WebMvcConfigurer`自定义资源处理器映射URL。 - 添加一个配置类,将URL路径(如`/uploads/**`)映射到文件系统目录(如`file:/path/to/uploads/`)。 - **关键配置**: - `addResourceHandler`: 设置HTTP访问路径。 - `addResourceLocations`: 映射到本地文件路径(使用`file:`前缀)。 ```java // WebConfig.java (配置类) import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 映射路径 "/uploads/**" 到本地目录(例如:"/Users/username/project/uploads/products/") registry.addResourceHandler("/uploads/**") .addResourceLocations("file:/" + System.getProperty("user.dir") + "/uploads/"); // 注意:路径需绝对路径,避免开发环境与生产环境差异 } } ``` - 配置后,图片可通过URL访问,如 `http://localhost:8080/uploads/products/image1.jpg`。 #### 3. **查询商品信息并返回图片URL** - 在商品查询服务中,从数据库获取商品数据(包括`imagePath`)。 - 基于配置的静态资源路径,生成完整的图片URL(如 `http://your-domain.com/uploads/products/image1.jpg`)。 - **示例代码**: ```java // ProductService.java (服务层) import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import java.util.List; @Service public class ProductService extends ServiceImpl<ProductMapper, Product> { public Product getProductById(Long id) { Product product = getById(id); if (product != null && product.getImagePath() != null) { // 生成完整图片URL(假设域名是localhost) String imageUrl = "http://localhost:8080" + product.getImagePath(); product.setImagePath(imageUrl); // 替换为完整URL } return product; } } ``` ```java // ProductController.java (添加查询方法) @GetMapping("/{id}") public JsonResult<Product> getProduct(@PathVariable Long id) { Product product = productService.getProductById(id); return new JsonResult<>(SUCCESS, product); // 返回包含图片URL的商品数据 } ``` - 控制器参考引用[^2]的JSON响应格式。 #### 4. **可选:防盗链处理** - 为了防止未授权访问图片(如热链接),可集成防盗链技术。 - 参考引用[^3],使用签名校验方案: - **原理**:生成带时效签名的URL(如 `http://domain.com/uploads/image.jpg?signature=abc123&expires=timestamp`)。 - **实现**: 1. 在查询商品时,后端生成签名URL。 2. 添加拦截器校验签名有效期。 3. 优点是安全性高且灵活[^3]。 ```java // 示例:简化版签名生成(在ProductService中) public String generateSignedUrl(String filePath) { long expires = System.currentTimeMillis() + 3600000; // 1小时有效期 String signature = DigestUtils.md5DigestAsHex((filePath + expires + "secret_key").getBytes()); return "http://localhost:8080" + filePath + "?signature=" + signature + "&expires=" + expires; } ``` - 在拦截器中校验签名有效性,拒绝非法请求。 #### 注意事项 - **路径处理**: - 开发环境:使用`System.getProperty("user.dir")`获取项目路径。 - 生产环境:建议使用配置文件(如`application.properties`)定义图片存储路径。 - **性能优化**: - 图片URL生成使用缓存(如Redis)减少数据库负载。 - 前端使用CDN加速图片访问。 - **安全**: - 限制上传文件类型(如只允许jpg/png)。 - 结合引用[^3]防盗链方案防止盗用。 通过以上步骤,查询商品时即可通过URL展示本地图片。例如,前端调用`GET /products/1`返回商品数据,其中图片URL可直接用于`<img src="图片URL">`标签加载图片
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿烂人丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值