Spring Boot 實現(xiàn)文件上傳
Maven依賴文章來源:http://www.zghlxwxcb.cn/news/detail-837344.html
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
上傳到本地
package yang.controller;
import java.util.UUID;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/upload")
public class UploadController {
@PostMapping
public void upload(@RequestPart MultipartFile file) throws IOException {
// 獲取文件名
String fileName = file.getOriginalFilename();
// 獲取文件擴展名
String extName = fileName.substring(fileName.lastIndexOf("."));
// 獲取項目根目錄
String root = System.getProperty("user.dir");
// 獲取文件存放目錄
String fileDir = "/src/main/java/yang/upload/";
// 如果目標目錄不存在就創(chuàng)建
File dir = new File(root + fileDir);
if (!dir.exists()) {
dir.mkdirs();
}
// 生成不重復(fù)的文件名稱
String uuidName = UUID.randomUUID().toString() + extName;
// 文件上傳的位置
String uploadDir = root + fileDir + uuidName;
// 上傳文件
file.transferTo(new File(uploadDir));
}
}
上傳到OSS
package yang.controller;
import java.util.UUID;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import yang.pojo.Result;
import java.io.InputStream;
@RestController
@RequestMapping("/upload")
public class UploadController {
@PostMapping
public Result upload(@RequestPart MultipartFile file) throws IOException {
// Endpoint(地域節(jié)點)
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 秘鑰
String accessKeyId = "LTAI5tNVbvdh8BGmnK3GNa4i";
String accessKeySecret = "JXN5Mc3e40QlOxGBBUVJjAsw2TNCR2";
// Bucket名稱
String bucketName = "qweqweqweqweqw12312cds";
// 文件名稱
String fileName = file.getOriginalFilename();
// 創(chuàng)建一個不重復(fù)的文件名稱
String uuidName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
// 創(chuàng)建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 文件輸入流
InputStream inputStream = file.getInputStream();
// 將文件上傳到OSS
ossClient.putObject(bucketName, uuidName, inputStream);
// 文件訪問路徑
String url = endpoint.split("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + uuidName;
return Result.success(url);
} catch (OSSException oe) {
System.out.println("捕獲了 OSSException, 這意味著您的請求已發(fā)送到 OSS, 但由于某種原因被拒絕并顯示錯誤響應(yīng)");
return Result.error(oe.getMessage());
} catch (ClientException ce) {
System.out.println("捕獲 ClientException, 表示客戶端在嘗試與 OSS 通信時遇到, 嚴重的內(nèi)部問題, 例如無法訪問網(wǎng)絡(luò)。");
return Result.error(ce.getMessage());
} finally {
if (ossClient != null) {
// 最后記得關(guān)閉ossClient
ossClient.shutdown();
}
}
}
}
封裝工具類
上面的代碼我們可以定義一個工具類,這樣在任何需要文件上傳的地方只需要調(diào)用 upload
方法即可,大大減少了代碼量文章來源地址http://www.zghlxwxcb.cn/news/detail-837344.html
package yang.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Component
public class AliOSSUtils {
private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
private String accessKeyId = "LTAI5tNVbvdh8BGmnK3GNa4i";
private String accessKeySecret = "JXN5Mc3e40QlOxGBBUVJjAsw2TNCR2";
private String bucketName = "qweqweqweqweqw12312cds";
public String upload(MultipartFile file) throws IOException {
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
String uuidName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, uuidName, inputStream);
String url = endpoint.split("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + uuidName;
ossClient.shutdown();
return url;
}
}
使用工具類
@PostMapping
public Result upload(@RequestPart MultipartFile file) throws IOException {
AliOSSUtils oss = new AliOSSUtils();
String url = oss.upload(file);
return Result.success(url);
}
到了這里,關(guān)于Spring Boot 實現(xiàn)文件本地以及OSS上傳的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!