這里寫目錄標題
- 前端傳出文件
- 后端本地存儲
- 阿里云OSS存儲
- 上傳Demo
- 實現上傳
- @ConfigurationProperties
前端傳出文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上傳文件</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">姓名: <input type="text" name="username"><br>年齡: <input type="text" name="age"><br>頭像: <input type="file" name="image"><br><input type="submit" value="提交">
</form>
</body>
</html>
后端本地存儲
import org.springframework.web.multipart.MultipartFile;
@PostMapping(value = "/upload")
public String upload(String username, Integer age,@RequestParam("image") MultipartFile file) throws IOException {log.info("文件上傳:{},{},{}",username,age,file);String name=file.getOriginalFilename();file.transferTo(new File("D:\\images\\"+name)); //存入本地return "success";
}
阿里云OSS存儲
存儲步驟
查找 Endpoint 地址
上傳Demo
import java.io.*;import com.aliyun.oss.*;
public class Demo {public static void main(String[] args) {// 設置 OSS Endpoint 地址String endpoint = "https://oss-cn-beijing.aliyuncs.com";String accessKeyId = "LTAI5tHKDa7NFXnaHWrUkmNs";String accessKeySecret = "aeQsl73MlNGDZ2Q3QD7cxES7zt5YVb";String bucketName = "k92q-b"; //bucket名字//上傳后的名稱String objectName="狗.jpg";//上傳的文件地址String filePatn="C:\\Users\\DELL\\Pictures\\頭像背景\\狗.jpg";OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);InputStream inputStream= null;try {inputStream = new FileInputStream(filePatn);} catch (FileNotFoundException e) {throw new RuntimeException(e);}ossClient.putObject(bucketName, objectName, inputStream);System.out.println("2. 文件 " + objectName + " 上傳成功。");}
}
實現上傳
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;/*** 阿里云 OSS 工具類*/
@Component
public class AliOSSUtils {private String endpoint = "https://oss-cn-beijing.aliyuncs.com";private String accessKeyId = "LTAI5tHKDa7NFXnaHWrUkmNs";private String accessKeySecret = "aeQsl73MlNGDZ2Q3QD7cxES7zt5YVb";private String bucketName = "k92q-b";/*** 實現上傳圖片到OSS*/public String upload(MultipartFile file) throws IOException {// 獲取上傳的文件的輸入流InputStream inputStream = file.getInputStream();// 避免文件覆蓋String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上傳文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件訪問路徑String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 關閉ossClientossClient.shutdown();return url;// 把上傳到oss的路徑返回}
}
接口部分
@PostMapping(value = "/upload")public String upload(String username,Integer age,@RequestParam("image") MultipartFile file){String url;try {url=aliOSSUtils.upload(file);} catch (IOException e) {throw new RuntimeException(e);}System.out.println("成功");return url;}
@ConfigurationProperties
為了方便修改配置項中的屬性
@Component
@Data //lombok
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSUtils{
private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}
aliyun:oss:endpoint: https://oss-cn-beijing.aliyuncs.comaccessKeyId: LTAI5tHKDa7NFXnaHWrUkmNsaccessKeySecret: aeQsl73MlNGDZ2Q3QD7cxES7zt5YVbbucketName: k92q-b