springMVC实现阿里OSS文件上传

1、安装SDK

您可以通过以下三种方式安装SDK。

在Maven项目中加入依赖项(推荐方式)

在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。以3.10.2版本为例,在<dependencies>中加入如下内容:

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

如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>

2、新建OSSClient

OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源。

新建OSSClient时,需要指定Endpoint。

public class UploadUtil {

	private static String endpoint = "oss-cn-hangzhou.aliyuncs.com";

	private static String accessKeyId = "#";
	private static String accessKeySecret = "#";

	private static String bucket = "#";


	public static String uploadFile(MultipartFile file) throws IOException {

			String filename = null;
			// 创建OSSClient实例。
			OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, 
accessKeySecret);

			// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径
中上传文件流。


			try(  InputStream inputStream = file.getInputStream();
				  ){
				//获取上传的文件名
				filename = getName(file);
				// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如
exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
				ossClient.putObject(bucket, filename, inputStream);

			}catch (Exception e){
				e.printStackTrace();
			}finally {
				if(ossClient != null){
					ossClient.shutdown();
				}
			}

			return getUrl(filename);

	}


	private static String getName(MultipartFile file){
		LocalDate localDate = LocalDate.now();

		String originalName = file.getOriginalFilename();
//随即生成一个文件名
		String randomName = UUID.randomUUID().toString().
							replace("-", "") + 
originalName.substring(originalName.indexOf("."));
//创建类似 2020/11/2/.. 文件
		return localDate.getYear() + "/" + localDate.getMonth() + "/" + 
localDate.getDayOfMonth() + "/" + randomName;
	}

	private static String getUrl(String name){
		return "https://" + bucket + "." + endpoint + "/" + name;
	}
}

 

 3、Cotroller控制器

下面使用了一个MultipartFile对象,需要导入几个包

 <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.22.RELEASE</version>
    </dependency>
@RequestMapping("/uploadImg")
	public Result uploadImg(MultipartFile myFile) throws IOException {

		String url = UploadUtil.uploadFile(myFile);

		if(url != null){
			return Result.success("上传成功!", url);
		}else {
			return Result.error("上传失败!");
		}
	}

4、html代码

html就简单的使用下表单。

<html>
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
    <form action="upload/uploadImg" enctype="multipart/form-data" method="post">
        <input type="file" name="myFile"/>
        <input type="submit"/>
    </form>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值