作者:一個程序員的成長;
來源:一個程序員的成長



Hello,今天想跟大家分享一下我近期做的項目中使用的文件上傳與文件下載,其實在以前我們想要做文件上傳可能要自己去搭建一個專門的服務器,然後將我們的文件上傳到這個服務器上,下載就從我們這個服務器上去進行下載就行了。

但是現在隨着技術的發展,像阿里這樣的公司給我們開發了好多一些專門的服務器來幹這樣的事情,根本不用我們自己再去搭建服務器,這樣用起來確實可以省很多的事情,我們要做的只是購買一臺雲服務器,將配置參數配置配置就可以實現文件的上傳與下載。

什麼是OSS

那麼什麼是OSS呢?其實你可以這樣理解,它就是阿里推出的一款雲服務器,專門用來做文件存儲的,這裏需要知道OSS它的存儲結構是對象存儲,什麼意思,就是說它是一個key-value的存儲結構,它是支持任何非結構化(圖片,視頻,文件)數據的存儲的。

開通一個屬於自己的OSS

接下來我就帶大家看一下,如何開通一個屬於自己並且免費的OSS雲服務器,首先我們要註冊阿里雲(我相信大家還是可以自己能註冊的),註冊好之後可能需要大家進行實名認證,大家認證一下即可。然後我們點擊這個對象存儲OSS,就可以進入。

基於OSS服務器的文件上傳以及文件下載


進來之後大家可以看到我圈的這個地方應該是有一個開通的按鈕的,因爲我已經開通了,所以顯示的是管理控制檯。申請開通之後可能有一段時間的審覈時間,應該不是很長10分鐘就可以通過。

基於OSS服務器的文件上傳以及文件下載


開通好了之後,我們就可以進入到我們的OSS管理控制檯了,那麼我們想要上傳文件那麼我們就必須先創建一個我們自己的存儲空間。點擊新建bucket就可以新建我們的存儲空間。

基於OSS服務器的文件上傳以及文件下載


在彈出的文本框中填寫一下信息,這裏大家只把Bucket名稱填好就可以了,其他基本不用動。

基於OSS服務器的文件上傳以及文件下載


創建好了之後,我們點擊我們剛纔創建的bucket名稱,就可以看到我們這個存儲空間的信息了。

基於OSS服務器的文件上傳以及文件下載


接下來我們就來寫一下代碼:

代碼擼起來


在上傳之前我們先介紹OSS裏面需要的幾個配置參數

endpoint:這個東西其實就是你那臺OSS服務器的訪問地址,這個地址一般分爲好幾種,最好理解的就是它可以分爲內網和外網,我們在選擇時候一般選擇外網;

accessKeyId:你的accessKeyId對應的值,一般是做訪問權限用的;

accessKeySecret:加密的,不做解釋,一般是考慮考慮安全問題;

bucketName:你創建的bucket存儲空間的名稱;

直接看下代碼,這個是我們寫的上傳文件的工具類,

public class OssFileUtils {
private static String endpoint = "oss-on-beijing.aliyuncs.cn";
private static String accessKeyId = "LTAICMr9msM1kJ";
private static String accessKeySecret = "i1b4a2mtKxsXJl674mhjTEwAKQxk";
private static String bucketName = "test-lbt";
/**
* 功能描述:
*
* @param:[objectKey, multipartFile 文件的新名稱]
* @return:java.lang.String
* @date:2018/10/14 15:46
**/
public static String uploadFile(String objectKey, MultipartFile multipartFile)
throws OSSException, ClientException, FileNotFoundException {
// 創建OSSClient的實例
OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
StringBuffer sb = new StringBuffer();
// 上傳的文件不是空,並且文件的名字不是空字符串
if (multipartFile.getSize() != 0 && !"".equals(multipartFile.getName())) {
ObjectMetadata om = new ObjectMetadata();
om.setContentLength(multipartFile.getSize());
// 設置文件上傳到服務器的名稱
om.addUserMetadata("filename", objectKey);
try {
ossClient.putObject(bucketName, objectKey, new ByteArrayInputStream(multipartFile.getBytes()), om);
} catch (IOException e) {
}
}
// 設置這個文件地址的有效時間
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
String url = ossClient.generatePresignedUrl(bucketName, objectKey, expiration).toString();
return url;
}
}


我們再寫一個Controller測試一下:

@RestController
@RequestMapping("/oss")
public class OssController {
@PostMapping
public void fileUpload(MultipartFile multipartFile, String fileName) {
try {
OssFileUtils.uploadFile(fileName,multipartFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}


最後我們用Postman來測一下,這裏我們選擇了一個文件,並且把這個文件的名字改爲了上傳的新文件111.xlsx:

基於OSS服務器的文件上傳以及文件下載


這樣就已經上傳成功了,我們來看下我們的服務器是不是有這樣一個文件:

基於OSS服務器的文件上傳以及文件下載


這就已經完成了文件的上傳功能。

其實下載也是很簡單的,只需要我們在上傳的時候拿到這個文件返回的url地址就可以了。在上面的代碼中我已經寫了,下面我們再來測一下看看,會不會給我們返回文件的地址。

基於OSS服務器的文件上傳以及文件下載


測試:

基於OSS服務器的文件上傳以及文件下載


很明顯我們是可以很容易的拿到文件的地址的,拿到地址那麼文件的下載也就輕而易舉了。

基於OSS服務器的文件上傳以及文件下載

相關文章