content: /**
   * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
   * <p>
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * <p>
   * http://www.apache.org/licenses/LICENSE-2.0
   * <p>
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.springblade.modules.resource;
  
  import io.swagger.annotations.Api;
  import lombok.AllArgsConstructor;
  import lombok.SneakyThrows;
  import org.springblade.core.oss.QiniuTemplate;
  import org.springblade.core.oss.model.BladeFile;
  import org.springblade.core.oss.model.OssFile;
  import org.springblade.core.tool.api.R;
  import org.springblade.core.tool.utils.Func;
  import org.springframework.context.annotation.Lazy;
  import org.springframework.web.bind.annotation.*;
  import org.springframework.web.multipart.MultipartFile;
  
  /**
   * 对象存储端点
   *
   * @author Chill
   */
  @Lazy
  @RestController
  @AllArgsConstructor
  @RequestMapping("/blade-resource/oss/endpoint")
  @Api(value = "对象存储端点", tags = "对象存储端点")
  public class OssEndpoint {
  	@Lazy
  	private QiniuTemplate qiniuTemplate;
  
  	/**
  	 * 创建存储桶
  	 *
  	 * @param bucketName 存储桶名称
  	 * @return Bucket
  	 */
  	@SneakyThrows
  	@PostMapping("/make-bucket")
  	public R makeBucket(@RequestParam String bucketName) {
  		qiniuTemplate.makeBucket(bucketName);
  		return R.success("创建成功");
  	}
  
  	/**
  	 * 创建存储桶
  	 *
  	 * @param bucketName 存储桶名称
  	 * @return R
  	 */
  	@SneakyThrows
  	@PostMapping("/remove-bucket")
  	public R removeBucket(@RequestParam String bucketName) {
  		qiniuTemplate.removeBucket(bucketName);
  		return R.success("删除成功");
  	}
  
  	/**
  	 * 拷贝文件
  	 *
  	 * @param fileName       存储桶对象名称
  	 * @param destBucketName 目标存储桶名称
  	 * @param destFileName   目标存储桶对象名称
  	 * @return R
  	 */
  	@SneakyThrows
  	@PostMapping("/copy-file")
  	public R copyFile(@RequestParam String fileName, @RequestParam String destBucketName, String destFileName) {
  		qiniuTemplate.copyFile(fileName, destBucketName, destFileName);
  		return R.success("操作成功");
  	}
  
  	/**
  	 * 获取文件信息
  	 *
  	 * @param fileName 存储桶对象名称
  	 * @return InputStream
  	 */
  	@SneakyThrows
  	@GetMapping("/stat-file")
  	public R<OssFile> statFile(@RequestParam String fileName) {
  		return R.data(qiniuTemplate.statFile(fileName));
  	}
  
  	/**
  	 * 获取文件相对路径
  	 *
  	 * @param fileName 存储桶对象名称
  	 * @return String
  	 */
  	@SneakyThrows
  	@GetMapping("/file-path")
  	public R<String> filePath(@RequestParam String fileName) {
  		return R.data(qiniuTemplate.filePath(fileName));
  	}
  
  
  	/**
  	 * 获取文件外链
  	 *
  	 * @param fileName 存储桶对象名称
  	 * @return String
  	 */
  	@SneakyThrows
  	@GetMapping("/file-link")
  	public R<String> fileLink(@RequestParam String fileName) {
  		return R.data(qiniuTemplate.fileLink(fileName));
  	}
  
  	/**
  	 * 上传文件
  	 *
  	 * @param file 文件
  	 * @return ObjectStat
  	 */
  	@SneakyThrows
  	@PostMapping("/put-file")
  	public R<BladeFile> putFile(@RequestParam MultipartFile file) {
  		BladeFile bladeFile = qiniuTemplate.putFile(file.getOriginalFilename(), file.getInputStream());
  		return R.data(bladeFile);
  	}
  
  	/**
  	 * 上传文件
  	 *
  	 * @param fileName 存储桶对象名称
  	 * @param file     文件
  	 * @return ObjectStat
  	 */
  	@SneakyThrows
  	@PostMapping("/put-file-by-name")
  	public R<BladeFile> putFile(@RequestParam String fileName, @RequestParam MultipartFile file) {
  		BladeFile bladeFile = qiniuTemplate.putFile(fileName, file.getInputStream());
  		return R.data(bladeFile);
  	}
  
  	/**
  	 * 删除文件
  	 *
  	 * @param fileName 存储桶对象名称
  	 * @return R
  	 */
  	@SneakyThrows
  	@PostMapping("/remove-file")
  	public R removeFile(@RequestParam String fileName) {
  		qiniuTemplate.removeFile(fileName);
  		return R.success("操作成功");
  	}
  
  	/**
  	 * 批量删除文件
  	 *
  	 * @param fileNames 存储桶对象名称集合
  	 * @return R
  	 */
  	@SneakyThrows
  	@PostMapping("/remove-files")
  	public R removeFiles(@RequestParam String fileNames) {
  		qiniuTemplate.removeFiles(Func.toStrList(fileNames));
  		return R.success("操作成功");
  	}
  
  }
  