package com.stylefeng.guns.modular.api; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectResult; import com.stylefeng.guns.modular.file.OSSService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.util.StreamUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; @RestController @RequestMapping("") public class FileController { private static final String endpoint = "oss-cn-hongkong.aliyuncs.com"; private static final String accessKeyId = "LTAI5tQZzqsZYX5gw8yRNchQ"; private static final String accessKeySecret = "5yJVdXwRzwPZwKKXp07lRAc7tkTxQp"; private static final String bucketName = "bizuphk"; @PostMapping("/base/files/upload") @ApiOperation(value = "文件上传", tags = {"文件上传"}) public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { // 创建 OSSClient 实例 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); long l = System.currentTimeMillis(); // 创建 PutObjectRequest 对象 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, String.valueOf(l), file.getInputStream()); ObjectMetadata metadata = new ObjectMetadata(); // 取消文件缓存,文件每次都会从OSS服务器获取 metadata.setHeader("Cache-Control", "no-cache"); metadata.setHeader("Expires", "0"); // 上传文件 PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest); // 关闭 OSSClient 实例 ossClient.shutdown(); String fileUrl = "https://" + bucketName + "." + endpoint + "/" + String.valueOf(l); return fileUrl; } // @ApiOperation(value = "服务端上传", notes = "服务端上传") // @PostMapping(value = "upload") // public String fileUpload(@RequestParam(value = "file") MultipartFile file) throws IOException { // InputStream inputStream = file.getInputStream(); // String filename = System.currentTimeMillis() + file.getOriginalFilename(); // // Endpoint以杭州为例,其它Region请按实际情况填写。 // final String endpoint = "oss-cn-hongkong.aliyuncs.com"; // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // final String accessKeyId = "LTAI5tQZzqsZYX5gw8yRNchQ"; // final String accessKeySecret = "5yJVdXwRzwPZwKKXp07lRAc7tkTxQp"; // final String bucketName = "bizuphk"; // // 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 // String objectName = AliOss.dir + filename; // // 创建OSSClient实例。 // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 // // InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt"); // // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。 // PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream); // OSSObject ossObject = ossClient.getObject(bucketName, objectName); // String uri = ossObject.getResponse().getUri(); // // 关闭OSSClient。 // ossClient.shutdown(); // uri = uri.replace("http://nn-bucket.oss-cn-shanghai.aliyuncs.com",FILE_CDN); // return uri; // } // @GetMapping("/base/files/download/{fileName}") // @ApiOperation(value = "文件下载", tags = {"文件下载"}) // public void downloadFile(@PathVariable("fileName") String fileName, HttpServletResponse response) { // InputStream inputStream = ossService.downloadFile(fileName); // if (inputStream != null) { // try { // StreamUtils.copy(inputStream, response.getOutputStream()); // response.setContentType("application/octet-stream"); // response.flushBuffer(); // } catch (IOException e) { // // 处理下载失败的逻辑 // } // } else { // // 处理文件不存在的逻辑 // } // } }