MultipartFile类型的文件上传到阿里云OSS

(阿里云Bucket域名、Key、秘钥等自行创建)

1 导入依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

2 构建OSSClient实例


public class FileBlobUtil {

	// 阿里云API的内或外网域名
	private static String endpoint;
	
	// 阿里云API的密钥Access Key ID
	private static String accessKeyId;
	
	// 阿里云API的密钥Access Key Secret
	private static String accessKeySecret;
	
	// 阿里云API的bucket名称
	private static String bucketName;
	
	// 赋值
	public static void settingIniOSS(String endpoint, String accessKeyId, String accessKeySecret,String bucketName) {
		FileBlobUtil.endpoint = endpoint;
		FileBlobUtil.accessKeyId = accessKeyId;
		FileBlobUtil.accessKeySecret = accessKeySecret;
		FileBlobUtil.bucketName = bucketName;
	}
	
	public static void uploadFile(String objectKey, MultipartFile multipartFile)
	            throws OSSException, ClientException, FileNotFoundException {
	
		// 创建OSSClient的实例
		OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
		try {
			if(multipartFile.getSize() != 0 && !"".equals(multipartFile.getName())){
				// getInputStream()返回一个InputStream以从中读取文件的内容。通过此方法就可以获取到流
			    InputStream multipartFileInputStream = multipartFile.getInputStream();
			    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, multipartFileInputStream);
			    ossClient.putObject(putObjectRequest);
			}
		} catch (IOException e) {
		    e.printStackTrace();
		}finally {
			// 关闭流
		    ossClient.shutdown();
		}
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的ZipOutputStream类将MultipartFile[]压缩为zip文件,然后将zip文件转换为MultipartFile并上到阿里云oss中。以下是一个示例代码: ```java public MultipartFile zipAndConvertToMultipartFile(MultipartFile[] files) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ZipOutputStream zipOut = new ZipOutputStream(bos); for (MultipartFile file : files) { String fileName = file.getOriginalFilename(); ZipEntry zipEntry = new ZipEntry(fileName); zipOut.putNextEntry(zipEntry); zipOut.write(file.getBytes()); zipOut.closeEntry(); } zipOut.close(); bos.close(); // Convert ByteArrayOutputStream to MultipartFile byte[] bytes = bos.toByteArray(); MultipartFile zipFile = new MockMultipartFile("files.zip", bytes); return zipFile; } public void uploadToOSS(MultipartFile zipFile) { // Initialize OSS client OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // Upload MultipartFile to OSS InputStream inputStream = null; try { inputStream = zipFile.getInputStream(); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, "files.zip", inputStream); ossClient.putObject(putObjectRequest); } catch (IOException e) { e.printStackTrace(); } finally { try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } // Close OSS client ossClient.shutdown(); } ``` 需要注意的是,这里使用了MockMultipartFile类来构造MultipartFile对象,因为ZipOutputStream类需要写入文件的名称,而MultipartFile没有提供这个方法。因此,我们需要手动构造一个MultipartFile对象。另外,如果需要上文件较大,可以考虑使用MultipartFile的TransferTo()方法来实现零拷贝上

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值