网站盈利模式设计,重庆智能网站建设企业,想学设计怎么入门在家自己学,企业推广网站的方法一、前言 有时在项目中需要使用一些存储系统来存储文件#xff0c;那么当项目要接入obs作为存储系统时#xff0c;就会利用obs来进行文件的上传下载#xff0c;具体实现如下。
二、如何通过obs实现文件的上传下载#xff1f; 1.添加相关的obs的maven依赖。 dependency…一、前言 有时在项目中需要使用一些存储系统来存储文件那么当项目要接入obs作为存储系统时就会利用obs来进行文件的上传下载具体实现如下。
二、如何通过obs实现文件的上传下载 1.添加相关的obs的maven依赖。 dependencygroupIdcom.huaweicloud/groupIdartifactIdesdk-obs-java-bundle/artifactIdversion3.23.9/version/dependency2.配置obs客户端连接。
Configuration
Data
public class OBSConfig { Value(${obs.accessKey}) private String accessKey; Value(${obs.secretKey}) private String secretKey; Value(${obs.endpoint}) private String endpoint; Value(${obs.bucket})private String bucketName;}
3.在YAML添加obs配置。
obs:endpoint: http://xxxxxx:xxxxaccessKey: xxxxxxxxsecretKey: xxxxxxxxxxxbucket: my-bucket
4.定义obs工具类代码如下
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.CompleteMultipartUploadRequest;
import com.obs.services.model.CompleteMultipartUploadResult;
import com.obs.services.model.ObjectMetadata;
import com.obs.services.model.PutObjectRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.InputStream;
import java.util.UUID;Component
public class ObsUtil {Resourceprivate OBSConfig oBSConfigprivate ObsClient obsClient;public ObsClient getClient() {if (obsClient null) {obsClient new ObsClient(oBSConfig.getAccessKey, oBSConfig.getSecretKey, oBSConfig.getEndPoint);}return obsClient;}/*** 上传文件到OBS** param file 待上传的文件* return 返回文件的访问路径*/public String uploadFile(File file) {try (ObsClient obsClient getObsClient()) {// 生成唯一的文件名String fileName UUID.randomUUID().toString() - file.getName();PutObjectRequest putObjectRequest new PutObjectRequest(bucketName, fileName, file);// 设置元数据可选ObjectMetadata metadata new ObjectMetadata();metadata.setContentType(application/octet-stream);putObjectRequest.setMetadata(metadata);obsClient.putObject(putObjectRequest);return endpoint / bucketName / fileName;} catch (ObsException e) {throw new RuntimeException(上传文件失败 e.getMessage(), e);}}/*** 上传文件流到OBS** param inputStream 文件输入流* param fileName 文件名* return 返回文件的访问路径*/public String uploadInputStream(InputStream inputStream, String fileName) {try (ObsClient obsClient getObsClient()) {// 生成唯一的文件名String objectKey UUID.randomUUID().toString() - fileName;PutObjectRequest putObjectRequest new PutObjectRequest(bucketName, objectKey, inputStream);// 设置元数据可选ObjectMetadata metadata new ObjectMetadata();metadata.setContentType(application/octet-stream);putObjectRequest.setMetadata(metadata);obsClient.putObject(putObjectRequest);return endpoint / bucketName / objectKey;} catch (ObsException e) {throw new RuntimeException(上传文件流失败 e.getMessage(), e);}}/*** 下载文件** param objectKey 对象键文件名* param savePath 保存路径*/public Inputstream downloadFile(String objectKey, String savePath) {try (ObsClient obsClient getObsClient()) {GetObjectRequest request new GetObjectRequest();request.setBucketName(StringUtils.isEmpty(bucket) ? oBSConfig.getBucket : bucket);String objectName (originFilePath null ? : originFilePath) fileName;objectName objectName.charAt(0) / ? objectName.substring(1) : objectName;request.setObjectKey(objectName);if (offset ! null) {request.setRangeStart(offset);if (length ! null) {request.setRangeEnd(offset length);}}ObsObject object client.getObject(request);return object.getObjectContent();} catch (ObsException e) {throw new RuntimeException(下载文件失败 e.getMessage(), e);}}/*** 删除文件** param objectKey 对象键文件名*/public void deleteFile(String objectKey) {try (ObsClient obsClient getObsClient()) {obsClient.deleteObject(bucketName, objectKey);} catch (ObsException e) {throw new RuntimeException(删除文件失败 e.getMessage(), e);}}
}5.文件上传接口实现示例:
RestController
RequestMapping(/obs)
public class OBSUploadController { Autowired private ObsUtil obsUtil ; PostMapping(/upload) public ResponseEntityString uploadFile( RequestParam(file) MultipartFile file) { try { obsUtil.uploadFile(file.getInputStream(),xxxx); return ResponseEntity.ok(OBS路径: objectKey); } catch (ObsException e) { return ResponseEntity.status(e.getResponseCode()) .body(OBS服务异常: e.getErrorMessage()); } catch (Exception e) { return ResponseEntity.internalServerError() .body(上传失败: e.getMessage()); } }
}
有兴趣的可以试一试。