springboot3+vue3融合项目实战-大事件文章管理系统-本地存储及阿里云oss程序集成
@RestController
public class FileUploadController {@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws Exception {//把文件的内容存储到本地磁盘上String originalFilename=file.getOriginalFilename();//保证文件的名字是唯一的,从而防止文件覆盖String filename= UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));file.transferTo(new File("C:\\Users\\lii\\Desktop\\files\\" + filename));return Result.success(url);}
}
以上实现了本地存储,然后我们在阿里云上找到阿里云程序代码示例并作细节更改
新建aliossutil类
上面的要换成自己的
代码如下:
public class AliOssUtil {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。//EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();private static final String ACCESS_KEY_ID = "LTAI5tLYFkHss4PubyfjfE61";private static final String ACCESS_KEY_SECRET = "96jnmP1rGAuW1HdDgOSbQhKPOkNKp0";// 填写Bucket名称,例如examplebucket。private static final String BUCKET_NAME = "big-event2587";public static String uploadFile(String objectName, InputStream in) throws Exception {// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。objectName = "001.png";// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。String region = "cn-hangzhou";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);String url = "";try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, new FileInputStream("C:\\Users\\lii\\Desktop\\files\\001.png"));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传字符串。PutObjectResult result = ossClient.putObject(putObjectRequest);//url组成:https://bucketname.endpoint/objectnameurl = "https://"+BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}return url;}
}
接着对FileUploadController进行更改
@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws Exception {//把文件的内容存储到本地磁盘上String originalFilename=file.getOriginalFilename();//保证文件的名字是唯一的,从而防止文件覆盖String filename= UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));//file.transferTo(new File("C:\\Users\\lii\\Desktop\\files\\" + filename));String url=AliOssUtil.uploadFile(filename,file.getInputStream());return Result.success(url);}