大事件项目记录13-接口开发-补充
一、文件上传接口(本地测试):
使用本地的方式,暂时存储文件,测试上传文件接口无误:
FileUploadController.java:
@RestController
public class FileUploadController {@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws IOException {//把文件的内容存储到本地磁盘String originalFilename = file.getOriginalFilename();//保证文件名唯一,防止文件覆盖String filename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));file.transferTo(new File("C:\\Users\\aazhyyi\\Desktop\\file\\"+filename));return Result.success("test");}
}
使用Postman测试:
二、使用阿里云OSS存储文件:
阿里云对象存储OSS(0bject Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。
具体使用方式如下:
1.引入Maven坐标:
<!--阿里云OSS依赖坐标--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency>
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>
2.新建工具类AliOssUtil.java:
package org.azhyyi.utils;import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;import java.io.FileInputStream;
import java.io.InputStream;public class AliOssUtil {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。private static final String ENDPOINT = "https://oss-cn-chengdu.aliyuncs.com";private static final String ACCESS_KEY_ID = "XXXX";private static final String ACCESS_KEY_SECRET = "XXXX";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。private static final CredentialsProvider CREDENTIALSPROVIDER = new DefaultCredentialProvider(ACCESS_KEY_ID, ACCESS_KEY_SECRET);// 填写Bucket名称,例如examplebucket。private static final String BUCKETNAME = "XXX";// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。private static final String REGION = "cn-chengdu";public static String uploadfile(String objectName, InputStream in) throws Exception {// 创建OSSClient实例。// 当OSSClient实例不再使用时,调用shutdown方法以释放资源。ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);OSS ossClient = OSSClientBuilder.create().endpoint(ENDPOINT).credentialsProvider(CREDENTIALSPROVIDER).clientConfiguration(clientBuilderConfiguration).region(REGION).build();String url = "";try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, objectName,in);// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// 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 = "http://"+BUCKETNAME+"."+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;}
}
3.在FileUploadController.java中进行调用工具类即可:
@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\\aazhyyi\\Desktop\\file\\"+filename));String url = AliOssUtil.uploadfile(filename, file.getInputStream());return Result.success(url);}
}
4.使用Postman进行测试:
并且在阿里云OSS也能看到上传的图片。
至此,大事件项目所有接口已经开发完毕。