SpringBootはAliOSSを使用してファイルクラウドストレージを実装します
序文
プロジェクトでは写真やドキュメントリソースをよく使用します。一般的に、そのようなファイルが少ない場合はサーバーに直接保存できますが、これらのファイルが一定数に達すると、必ずアプリケーションサーバーに配置されます。アプリケーションサーバーのパフォーマンスに影響を与えます。また、これらのイメージリソースがフロントエンドディスプレイで直接使用されることもあるため、アプリケーションサーバーに配置することは適切ではありません。一部の比較的大規模なインターネット企業は、ファイルを保存する目的を達成するためにいくつかの分散ファイルシステムを使用する場合がありますが、このアプローチのしきい値は高すぎます。適切で費用効果の高いファイル保存方法を見つける方法は?それなら私が言わなければならないのはオブジェクトストレージサービスだけOSS
です。
FastDFS分散ファイルシステムは私のブログを参照できます:FastDFS分散ファイルシステム
テキスト
オブジェクトストレージサービス
オブジェクトストレージサービス(OSS
):大規模で安全、低コスト、信頼性の高いクラウドストレージサービスであり、あらゆるタイプのファイルの保存に適しています。
OSS
写真、オーディオとビデオ、ログなどの大量のファイルの保存に使用できます。- さまざまな端末デバイス、
Web
Webサイトプログラム、およびモバイルアプリケーションは、OSS
データを直接読み書きできます。 OSS
ストリーミング書き込みとファイル書き込みをサポートします。
簡単に言うと、OSS
サーバーに大量のファイル、画像、その他のリソースを保存しないようにすることIO
で、サーバーの読み取りと書き込みの帯域幅を増やすことができます。
SpringBootはAliOSSを使用してファイルクラウドストレージを実装します
準備
ステップ1:アリババクラウドモールでオブジェクトストレージサービスを購入する
手順2:AlibabaCloudコンソールで構成するAccessKey
コード部分
メイヴンの依存関係
<!--oss对象关系存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
<!--apache comment tools-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!--提供文件上传下载-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
application.properties:構成クラス
##basic setting
server.port = 8080
server.address =127.0.0.1
# 解除文件大小限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
OssManagerUtil.java:AliOSSツールクラス
/**
* 阿里Oss对象存储工具类
*/
public class OssManagerUtil {
private static String endpoint = “oss中获取的oss公网路径";
private static String accessKeyId = “自己在阿里云申请的accessKeyId";
private static String accessKeySecret = "自己在阿里云申请的accessKeySecret";
private static String bucket = "bucket名称";
private static OSS client;
static {
client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上传图片
*
* @param fileName 图片名称,图片名称包括文件夹名称和“/”
* @param length 图片大小
* @param content 输入流
*/
public static String uploadImage(String fileName, long length, InputStream content) {
uploadBucketImage(bucket, fileName, length, content);
return "https://" + bucket + "." + endpoint + "/" + fileName;
}
/**
* 上传文件
*
* @param bucket 存储空间名
* @param fileName 文件名(包括文件夹名称和“/”)
* @param length 流的长度
* @param content 输入流
*/
public static void uploadBucketImage(String bucket, String fileName, long length, InputStream content) {
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(length);
// 上传Object.
client.putObject(bucket, fileName, content, meta);
}
/**
* 删除文件
*
* @param fileName 文件名称,图片名称包括文件夹名称和“/”
*/
public static boolean delShopImage(String fileName) {
//判断文件是否存在
boolean exist = client.doesObjectExist(bucket, fileName);
//文件不存在删除失败
if (!exist) {
return false;
}
//执行删除
client.deleteObject(bucket, fileName);
return true;
}
/**
* 获得上传文件后url链接
*
* @param fileName 文件名(包括文件夹名称和“/”)
* @return
*/
public static String getUrl(String fileName) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
URL url = client.generatePresignedUrl(bucket, fileName, expiration);
if (url != null) {
return url.toString();
}
return null;
}
/**
* 创建存储空间
*
* @param bucketName 新建存储空间默认为标准存储类型,私有权限。
* @return
*/
public static void crateBucket(String bucketName) {
// 新建存储空间默认为标准存储类型,私有权限。
client.createBucket(bucketName);
}
}
検証
テストインターフェイス:ファイルのアップロード
/**
* 文件上传到阿里oss
*/
@PostMapping("/uploadFiletoOss")
@ApiOperation(value = "文件上传到阿里oss")
public ResponseResult uploadFiletoOss(@RequestParam("file")MultipartFile file)throws IOException{
String fileName = file.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
fileName = UUID.randomUUID().toString().replace("-", "") + "." + suffix;
String url = OssManagerUtil.uploadImage(fileName,file.getInputStream().available(),file.getInputStream());
return ResponseResult.success(url);
}
テストインターフェイスにアクセスします。
インターフェイスから返されたOSSオンラインファイルのURLを開いて、オンラインファイルを取得します。
ソースコード
プロジェクトのソースコードは、私のgithubから取得できます。githubソースコードアドレス
ソースコード分析は私のブログを参照することができます:箱から出してSpringBootテンプレート