Springboot结合阿里云OSS进行图片上传的时候图片大小受限

首先,SpringBoot默认上传文件大小不能超过1MB,超过之后会报以下异常:
org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException:
The field file exceeds its maximum permitted size of 1048576 bytes.

这里的意思是我们Springboot内嵌的Tomcat限制了单个文件/图片只能是1MB的大小,超过了这个默认的大小就会抛出异常。

解决方法:

在配置文件(application.properties/application.yml)中加入如下设置即可

1.X版本的话

spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB

2.X版本的话

spring.servlet.multipart.max-file-size=30Mb
spring.servlet.multipart.max-request-size=30Mb

或者使用

spring.servlet.multipart.maxFileSize=10MB
spring.servlet.multipart.maxRequestSize=20MB

### 实现 Spring Boot 项目中的阿里云 OSS图片上传 为了在 Spring Boot 应用程序中实现多图片上传阿里云 OSS (Object Storage Service),需完成几个主要部分的工作。这包括设置依赖项、配置属性以及编写用于处理文件上传的服务逻辑。 #### 添加 Maven 或 Gradle 依赖 首先,在项目的构建工具配置文件 `pom.xml` 或者 `build.gradle` 中加入阿里云 SDK 的依赖: 对于Maven: ```xml <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>LATEST_VERSION</version> </dependency> ``` 对于Gradle: ```groovy implementation 'com.aliyun.oss:aliyun-sdk-oss:LATEST_VERSION' ``` 请注意替换 `LATEST_VERSION` 为实际版本号[^1]。 #### 配置应用属性 接着,编辑 `application.yml` 文件来定义与阿里云 OSS 相关的参数,例如访问密钥ID (`accessKeyId`) 和秘密键 (`accessKeySecret`) ,端点地址(`endpoint`) 及存储桶名称(`bucketName`) : ```yaml aliyun: oss: endpoint: https://oss-cn-beijing.aliyuncs.com accessKeyId: YOUR_ACCESS_KEY_ID accessKeySecret: YOUR_ACCESS_KEY_SECRET bucketName: YOUR_BUCKET_NAME ``` 确保这些值被正确填写并妥善保管,因为它们涉及到账户的安全性[^3]。 #### 编写控制器和服务层代码 创建一个新的 RESTful API 控制器类用来接收前端发送过来的照片数据流,并调用服务方法执行具体的业务操作——即向指定位置上传多个图像资源到对象存储空间内。 ```java @RestController @RequestMapping("/api/images") public class ImageUploadController { @Autowired private OssService ossService; @PostMapping(value="/upload", consumes=MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<List<String>> uploadImages(@RequestParam("files") MultipartFile[] files){ List<String> urls = Arrays.stream(files).map(file -> { try{ return ossService.uploadImage(file); }catch(Exception e){ throw new RuntimeException(e.getMessage()); } }).collect(Collectors.toList()); return ResponseEntity.ok(urls); } } ``` 这里假设有一个名为 `OssService` 接口及其默认实现负责具体的操作细节;当接收到一组或多组二进制形式的数据包时,则通过映射函数将其转换成字符串列表返回给客户端作为响应体的一部分。 下面是简单的 `OssServiceImpl.java` 示例: ```java @Service @Slf4j public class OssServiceImpl implements OssService { @Value("${aliyun.oss.endpoint}") private String endpoint; @Value("${aliyun.oss.accessKeyId}") private String accessKeyId; @Value("${aliyun.oss.accessKeySecret}") private String accessKeySecret; @Value("${aliyun.oss.bucketName}") private String bucketName; @Override public String uploadImage(MultipartFile file) throws Exception { // 初始化OSSClient实例 OSS client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); InputStream inputStream = null; try { // 获取输入流 inputStream = file.getInputStream(); // 创建PutObjectRequest对象. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, generateFileName(), inputStream); // 完成上传请求并获取返回结果 ObjectMetadata metadata = client.putObject(putObjectRequest).getObjectMetadata(); // 构建公开链接URL URL url = client.generatePresignedUrl(new GetObjectRequest(bucketName,metadata.getUserMetaData().get("filename")),Date.from(LocalDate.now().plusDays(7).atStartOfDay(ZoneOffset.UTC))); log.info("File uploaded successfully with URL={}",url.toString()); return url.toString(); } finally { if(inputStream !=null){ inputStream.close(); } // 关闭client client.shutdown(); } } /** * Generate unique filename based on current timestamp and original name of the image */ private static String generateFileName(){ return UUID.randomUUID()+"_"+System.currentTimeMillis()+".jpg"; } } ``` 上述代码片段展示了如何利用 Java 流程控制语句和异常处理器机制安全有效地实现了批量图片上传的功能[^2].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值