JAVA集成阿里云OSS对象存储

JAVA实现本地上传阿里云OSS云存储(超详细) 2、上传代码示例 看完如果对你有用,感谢点赞支持!明天我们继续探索新的知识!!! 阅读详情

1 : 配置集成

1.1、对象存储OSS

这就不用说了,从阿里云平台花钱买OSS对象存储就行了。
然后在bucket列表中创建自己使用的bucket即可。
比如创建:oss-test
然后从概览中找到 Access Key
在这里插入图片描述
在这里插入图片描述
然后就可以看到对应的id和key了。
在这里插入图片描述

这个时候,就有了四个参数
1、access-key:就是刚才的 AccessKey ID
2、secret-key:页面点击‘查看 Secret’就能看的到了
3、bucket:新建的桶的名称oss-test
4、endpoint:页面截图,选择自己的桶就能看到对应的endpoint

2 : 代码配置

2.1、说明

本篇代码,主要做的两件事:
1、文件上传至OSS
2、对服务器磁盘文件转存至OSS

2.2、配置文件

在application.yml中增加配置

#阿里云oss
alibaba:
  cloud:
    access-key: **********
    secret-key: **********
    oss:
      endpoint: oss********.aliyuncs.com
      bucket: *******
  config:
    # oss开关 0:关  1:开
    oss-switch: 1
    # oss 开始使用时间
    oss-date: 2022-01-01
    # oss 文件夹目录
    oss-directory: image,attach,video,audio,template
    # oss title
    oss-title: https://
	# oss business directory
    business-directory: user,org

非常非常重要:在配置的时候上面4个重要参数的位置,以及名称一定不能修改,否则会报找不到endPoint的错

2.3、加载配置文件代码

新建 YmlConfigBean.java

package com.upload.bean;

import org.springframework.stereotype.Component;
import java.util.List;

/**
 * 配置文件参数读取
 */
@Component
public class YmlConfigBean {
	
    // 阿里云OSS 申请的 key id
    public volatile static String OSS_KEY_ID;
    // 阿里云OSS 申请的 key secret
    public volatile static String OSS_KEY_SECRET;
    // 阿里云OSS endpoint
    public volatile static String OSS_ENDPOINT;
    // 阿里云OSS bucket
    public volatile static String OSS_BUCKET;
    // 阿里云OSS 开关 0 关 1 开
    public volatile static String OSS_SWITCH;
    // 阿里云OSS 开始使用时间
    public volatile static String OSS_DATE;
    // 阿里云OSS 文件夹目录
    public volatile static List<String> OSS_DIRECTORY;
    // 阿里云OSS 开始使用时间
    public volatile static String OSS_TITLE;
	//业务文件类别
    public volatile static List<String> BUSINESS_DIRECTORY;
}

新建 YmlConfigBeanMethod.java

package com.upload.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class YmlConfigBeanMethod {

    @Value("#{'${alibaba.cloud.access-key}'}")
    private void setOssKeyId(String key) {
        YmlConfigBean.OSS_KEY_ID = key;
    }
    @Value("#{'${alibaba.cloud.secret-key}'}")
    private void setOssKeySecret(String key) {
        YmlConfigBean.OSS_KEY_SECRET = key;
    }
    @Value("#{'${alibaba.cloud.oss.endpoint}'}")
    private void setOssEndpoint(String key) {
        YmlConfigBean.OSS_ENDPOINT = key;
    }
    @Value("#{'${alibaba.cloud.oss.bucket}'}")
    private void setOssBucket(String key) {
        YmlConfigBean.OSS_BUCKET = key;
    }
    @Value("#{'${alibaba.config.oss-switch}'}")
    private void setOssSwitch(String key) {
        YmlConfigBean.OSS_SWITCH = key;
    }
    @Value("#{'${alibaba.config.oss-date}'}")
    private void setOssDate(String key) {
        YmlConfigBean.OSS_DATE = key;
    }
    @Value("#{'${alibaba.config.oss-directory}'.split(',')}")
    public void setOssDirectory(List<String> key){
        YmlConfigBean.OSS_DIRECTORY = key;
    }
    @Value("#{'${alibaba.config.oss-title}'}")
    private void setOssTitle(String key) {
        YmlConfigBean.OSS_TITLE = key;
    }

	@Value("#{'${alibaba.config.business-directory}'.split(',')}")
    public void setBusinessDirectory(List<String> key){
        YmlConfigBean.BUSINESS_DIRECTORY= key;
    }
    
}

2.4、封装统一的DTO

建一个统一的DTO Result.java

package com.upload.bean;

/**
 * 统一的DTO
 */
public class Result<T> {
    private boolean success = true;
    private Integer code = 0;
    private String msg;
    private T data;

    public boolean isSuccess() {
        return this.code == 0;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
        if(code != 0){
            success = false;
        }
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }

    public Result() {
        super();
    }
    public Result(boolean success) {
        this.success = success;
        if(success){
            code = 0;
        }
    }
    public Result(int code) {
        super();
        success = false;
        this.code = code;
    }
    public Result(String msg) {
        success = false;
        this.msg = msg;
    }
    public Result(boolean success, String msg) {
        super();
        this.success = success;
        this.msg = msg;
    }
    public Result(int code, String msg) {
        super();
        success = false;
        this.code = code;
        this.msg = msg;
    }

    /*设置返回为成功*/
    public static Result ok() {
        return new Result();
    }
    /*设置返回为成功,同时设置返回数据*/
    public Result<T> ok(T data) {
        Result<T> result = new Result<T>();
        result.setData(data);
        return result;
    }
    /*设置返回为失败,默认未知异常*/
    public static Result error() {
        return error(500, "未知异常,请联系管理员!");
    }
    /*设置返回为失败,同时设置异常信息*/
    public static Result error(String msg) {
        return error(500, msg);
    }
    /*设置返回为失败,同时设置code,msg*/
    public static Result error(Integer code,String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
    public static Result<Object> error(Integer code,String msg,Object data) {
        Result<Object> result = new Result<Object>();
        result.setData(data);
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
    public static Result success(Object data) {
        Result<Object> result = new Result<Object>();
        result.setData(data);
        return result;
    }
    public static Result success(String msg) {
        Result result = new Result();
        result.setMsg(msg);
        return result;
    }

}

常量配置好之后,方便后续直接使用配置文件的中内容。

2.5、OSS上传Controller

新建 OssUploadController.java

package com.upload;

import com.upload.service.IOssUploadService;
import com.upload.bean.Result;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 阿里云OSS 前端控制器
 * </p>
 */
@Controller
public class OssUploadController {

    @Resource
    private IOssUploadService ossUploadService;

    /**
     * OSS文件上传
     */
    @RequestMapping("/uploadOss")
    @ResponseBody
    public Result upload(@RequestParam String ossDirectory, @RequestParam String businessDirectory,
                         @RequestParam MultipartFile file, HttpServletRequest request) {
        return ossUploadService.upload(ossDirectory, businessDirectory, file, request);
    }

    /**
     * OSS文件迁移
     */
    @RequestMapping("/migrationOss")
    @ResponseBody
    public Result doDataMigration(@RequestParam String ossDirectory, @RequestParam String businessDirectory) {
        return ossUploadService.doDataMigration(ossDirectory, businessDirectory, true);
    }

}

2.6、OSS上传Service

新建 IOssUploadService.java

package com.upload.service;

import com.upload.bean.Result;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 阿里云OSS 服务类
 */
public interface IOssUploadService {

    Result upload(String ossDirectory, String businessDirectory, MultipartFile file, HttpServletRequest request);

    Result doDataMigration(String ossDirectory, String businessDirectory, boolean threadFlag);

}

2.7、OSS上传ServiceImpl

新建 OssUploadServiceImpl.java

package com.upload.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.upload.bean.Result;
import com.upload.bean.YmlConfigBean;
import com.upload.entity.FileUpload;
import com.upload.service.IOssUploadService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Slf4j
@Service
public class OssUploadServiceImpl implements IOssUploadService {

//    @Resource
//    private UploadMapper uploadMapper;
    private final static String ROOT_PATH = "/data/file/";

    /**
     * 对外提供的文件上传
     * @param ossDirectory OSS所属模块
     * @param fileDir 文件所属模块
     * @param file 文件
     * @param request 请求
     */
    @Override
    public Result upload(String ossDirectory, String fileDir, MultipartFile file, HttpServletRequest request) {
        if (file.isEmpty()) {
            return Result.error("不能上传空文件");
        }
        String originalFilename = file.getOriginalFilename();
        Long fileBytes = file.getSize();
        if (Strings.isBlank(originalFilename) || 0L == fileBytes) {
            return Result.error("不能上传空文件");
        }
        if(Strings.isBlank(ossDirectory)){
            ossDirectory = "image";
        } else {
            if (!YmlConfigBean.OSS_DIRECTORY.contains(ossDirectory.startsWith("/") ? ossDirectory.substring(1) : ossDirectory)) {
                log.info("文件上传目录非法,非法目录:"+ ossDirectory);
                return Result.error("文件上传目录非法,请更改文件上传目录");
            }
        }
        if (!YmlConfigBean.BUSINESS_DIRECTORY.contains(fileDir.startsWith("/") ? fileDir.substring(1) : fileDir)) {
            log.info("文件上传目录非法,非法目录:"+ fileDir);
            return Result.error("文件上传目录非法,请更改文件上传目录");
        }
        String fileMd5;
        try {
            fileMd5 = DigestUtils.sha256Hex(file.getInputStream());
        } catch (Exception e) {
            log.error(file.getOriginalFilename() + "验证文件md5失败",e);
            return Result.error("当前验证文件md5失败");
        }
        Result<String> result = new Result<>();
        String uploadUrl = null;
        String newName = null;
        OSS ossClient = getOSSClient();
        try {
            //获取上传文件流
            InputStream inputStream = file.getInputStream();
            //构建日期路径:/2019/02/26/文件名
            String fileType = originalFilename.split("\\.")[originalFilename.split("\\.").length - 1];
            newName = DateFormatUtils.format(new Date(), "yyMMddHHmmss") +
                    (new SecureRandom().nextInt(100) + 100) + "." + fileType;
            String newFileDir = (fileDir.startsWith("/") ? fileDir.substring(1) : fileDir).trim().replace(" ","") +
                    getDatePath();
            String fileUrl = ossDirectory + "/" + newFileDir + newName;
            // 上传文件 (上传文件流的形式)
            ossClient.putObject(YmlConfigBean.OSS_BUCKET, fileUrl, inputStream);
            //获取url地址
            uploadUrl = YmlConfigBean.OSS_TITLE + YmlConfigBean.OSS_BUCKET + "." + YmlConfigBean.OSS_ENDPOINT + "/" + fileUrl;
        } catch (IOException e) {
            log.error("上传OSS失败,文件名:" + originalFilename);
            throw new RuntimeException("上传OSS失败");
        } finally {
            // 关闭OSSClient。
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        //文件上传实体属性赋值,数据入库
        try {
            log.info("原文件名称:" + originalFilename + "\n" + "文件MD5码:" + fileMd5 + "\n" + "新文件名称:" + newName + "\n" +
            "文件路径:" + uploadUrl + "\n" + "文件大小:" + fileBytes);
//            uploadMapper.doUploadInsert(null);
        } catch (Exception e) {
            log.error("上传文件,数据库记录失败", e);
        }
        result.setData(uploadUrl);
        return result;
    }

    /**
     * 文件迁移
     * @param ossDirectory 需要同步的OSS文件夹
     * @param businessDirectory 业务文件路径,以此查询表中数据
     * @param threadFlag 是否开启异步线程
     * @return Result
     */
    @Override
    public Result doDataMigration(String ossDirectory, String businessDirectory, boolean threadFlag){
        if(Strings.isBlank(businessDirectory)) return Result.error("路径不能为空");
//        List<FileUpload> fileUploads = uploadMapper.selectList();
        List<FileUpload> fileUploads = new ArrayList<>();
        if(null == fileUploads || fileUploads.size() == 0) return Result.error("暂无数据");
        if(threadFlag){
            Thread thread = new Thread(()->{
                doSonThread(fileUploads, ossDirectory);
            });
            thread.start();
        } else {
            doSonThread(fileUploads, ossDirectory);
        }
        return Result.success("文件迁移中,请稍后查看!");
    }

    private void doSonThread(List<FileUpload> fileUploads, String ossDirectory){
        if(Strings.isBlank(ossDirectory)) {
            ossDirectory = "image";
        }
        String filePath = null;
        for(FileUpload fileUpload : fileUploads){
            if(Strings.isBlank(fileUpload.getFilePath()) || Strings.isBlank(fileUpload.getFileName())){
                continue;
            }
            filePath = uploadFileAndDeleteByPath(ROOT_PATH + fileUpload.getFilePath(), fileUpload.getFileName(), ossDirectory);
            //更新新的路径入库
            fileUpload.setFilePathNew(filePath);
//            uploadMapper.doUploadUpdate(fileUpload);
        }
    }

    public static String uploadFileAndDeleteByPath(String path, String fileName, String ossDirectory) {
        File file = new File(path + File.separator + fileName);
        return uploadFileAndDeleteByFile(file, ossDirectory);
    }

    public static String uploadFileAndDeleteByFile(File file, String ossDirectory) {
        if (file.isDirectory()) return null;
        String filePath = null;
        Boolean deleteFlag = false;
        try {
            filePath = uploadHistory(ossDirectory, file.getPath(), file);
            deleteFlag = checkExists(filePath.substring(filePath.indexOf(YmlConfigBean.OSS_ENDPOINT) + 1 + YmlConfigBean.OSS_ENDPOINT.length(), filePath.length()));
        } catch (IOException e) {
            log.error("上传OSS失败,文件名:" + file.getName());
            throw new RuntimeException("上传OSS失败");
        }
        if(deleteFlag){
            file.delete();
        }
        return filePath;
    }

    public static String uploadHistory(String ossDirectory, String businessDirectory, File file) throws IOException{
        String filename = file.getName();
        OSS ossClient = getOSSClient();
        //获取上传文件流
        InputStream inputStream = new FileInputStream(file);
        //构建日期路径:/2019/02/26/文件名
        String fileType = filename.split("\\.")[filename.split("\\.").length - 1];
        String newName = filename.substring(0, filename.indexOf(".")) + "_" + (new SecureRandom().nextInt(1000) + 1000) + "." + fileType;
        String newFileDir = (businessDirectory.startsWith("/") ? businessDirectory.substring(1) : businessDirectory).trim().replace(" ","");
        String fileUrl = ossDirectory + "/" + newFileDir + newName;
        // 上传文件 (上传文件流的形式)
        ossClient.putObject(YmlConfigBean.OSS_BUCKET, fileUrl, inputStream);
        ossClient.shutdown();
        //获取url地址
        return YmlConfigBean.OSS_TITLE + YmlConfigBean.OSS_BUCKET + "." + YmlConfigBean.OSS_ENDPOINT + "/" + fileUrl;
    }

    public static boolean checkExists(String objectName) throws IOException{
        OSS ossClient = getOSSClient();
        Boolean flag = ossClient.doesObjectExist(YmlConfigBean.OSS_BUCKET, objectName);
        ossClient.shutdown();
        return flag;
    }

    public static OSS getOSSClient() {
        OSS ossClient = new OSSClientBuilder().build(YmlConfigBean.OSS_ENDPOINT, YmlConfigBean.OSS_KEY_ID, YmlConfigBean.OSS_KEY_SECRET);
        //判断oss实例是否存在:如果不存在则创建,如果存在则获取
        if (!ossClient.doesBucketExist(YmlConfigBean.OSS_BUCKET)) {
            //创建bucket
            ossClient.createBucket(YmlConfigBean.OSS_BUCKET);
            //设置oss实例的访问权限:公共读
            ossClient.setBucketAcl(YmlConfigBean.OSS_BUCKET, CannedAccessControlList.PublicRead);
        }
        return ossClient;
    }

    /*public static void uploadFileAndDelete(File file) {
        if (file.isDirectory()) {
            String[] fileList = file.list();
            if(null != fileList && fileList.length > 0){
                //递归删除目录中的子目录下
                File subFile = null;
                for(String str : fileList){
                    subFile = new File(file, str);
                    log.info(subFile.getPath());
                    uploadFileAndDelete(subFile);
                }
            }
        }
        uploadFileAndDeleteByFile(file, null);
    }*/

    public static String getDatePath(){
        return "/" + DateFormatUtils.format(new Date(), "yyyy-MM-dd").replaceAll("-","/") + "/";
    }

}

3 : 测试

3.1、文件上传

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在OSS上存储的路径为:OSS文件夹(image)+ 业务自定义文件夹名称(org)+ 年月日时间路径 + 重命名文件名称。

3.2、文件迁移

大致思路:
1、根据业务需要,查询数据库中的文件路径及名称,到服务器磁盘中查找该文件。
2、调用简易版的文件上传,上传至OSS中。
3、上传之后回调阿里自带方法doesObjectExist进行回溯校验,检查是否在OSS中存在。
4、如存在该文件,则删除服务器磁盘对应的文件即可。

因代码需根据业务数据来进行数据的查询等操作,可自行修改并验证。

4 : 总结

4.1、参考资料

参考资料:异常官网链接:https://help.aliyun.com/document_detail/32023.html

4.2、注意事项

注意事项:在配置的时候上面4个重要参数的位置,以及名称一定不能修改,否则会报找不到endPoint的错

4.3、源码链接

优快云资源链接:https://download.youkuaiyun.com/download/qq_38254635/87352781
百度网盘资源链接:https://pan.baidu.com/s/1kl6KIntr1qvcJPG642DWAA?pwd=fsj2
提取码: fsj2

有什么不对的还望指正,书写不易,觉得有帮助就点个赞吧!

Java对接阿里云OSS云存储详细流程 / 生成唯一文件名(加时间戳避免重复)// 上传文件到 OSS。2.创建config文件。 阅读详情

相关推荐

SpringBoot整合OSS存储

OSS存储与COS存储对比,springboot整合OSS存储笔记

小凯的博客 5354

Java-整合OSS

最近公司的技术负责人让我整合下 OSS 到项目中,所以花了一点时间研究了下OSS,虽然说在 OSS 的官方文档中有如何整合 OSS 的详细说明,但是不得不说文档实在是太详细了,如果仅仅是通过看官方文档去整合,可能会看到太多暂时用不上的内容,所以我简化下文档中的内容,也是谨防日后忘记,故此作为分享。阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。多种存储类型供选择,全面优化存储成本。

xhmico的博客 4136

手把手教你编写I2C读写EEPROM代码(驱动层实现)

从底层寄存器配置到时序控制,详解如何编写可移植的I2C读写EEPROM代码,覆盖起始信号、地址帧、数据收发及ACK应答等关键环节,确保在STM32、ESP32等主流平台稳定运行,真正落地i2c读写eeprom代码需求。

weixin_35756130的博客 504

Java -- OSS对象存储服务(Object Storage Service,简称 OSS)文件服务器

一个成熟的技术架构要有一定的分离性, 平台级的产品一般会这么分:应用服务器、数据库服务器、文件服务器。一般文件、数据库、应用服务器,都应该做逻辑和物理的分离。以前我们想要做文件上传可能要自己去搭建一个专门的,然后将我们的文件上传到这个服务器上,下载就从我们这个服务器上去进行下载就行了。但是现在随着技术的发展,像阿里这样的公司给我们开发了好多一些专门的服务器来干这样的事情,根本不用我们自己再去搭建服务器,这样用起来确实可以省很多的事情,我们要做的只是购买一台,将配置参数配置配置就可以实现文件的上传与下载。

MinggeQingchun的博客 5750

私募pp网-私募排行js逆向

在数据采集的学习过程当中,发现了一个有意思的网站,所以记录一下,仅供学习交流,用于其他用途与作者无关。目标:私募基金当中的列表页数据。

zzp28218的博客 1895

2025东方财富笔试考什么?cata能力测评攻略|答题技巧真题分享

4月10日-4月20日 专业笔试(行测+金融知识混合双打) 4月25日-5月10日 面试车轮战(AI面+半结构化+压力面) 5月15日起 Offer发放(谈薪必杀技:对标同花顺/雪球)这里不仅是金融极客的乐园,更是**“年薪30万管培生计划”**的主战场——你将用代码重构K线,用算法预判市场,成为资本市场的“数字先知”。东方财富,中国金融信息服务领域的“隐形冠军”,以**“金融数据+互联网”双擎驱动**,打造了覆盖证券、基金、期货的全生态交易平台。:• “我总坚持自己的方案”(HR:团队毒药!

Dgntsj的博客 3257

分布式集群上传文件到阿里云存储-OSS

前两天一个小伙伴问到分布式集群中,比如订单服务搞成集群,我每次都被负载均衡到不同的服务器,那么我上传的文件怎么搞?怎么统一管理的,我这里就教给大家一种简单的方法,统一存储在阿里云服务器的对象存储OSS中。 oss是什么我就不讲了,百度一搜一大堆。 今天分两步讲下: 第一步讲下OSS云存储开通与使用。 首先登陆阿里云,首页里面选择 存储与网络里面的对象存储OSS. 然后点击 立即开通。 下一步 右上角头像点击、实名认证 个人实名认证 支付宝 扫码登录。 随便

cyberHerman的博客 1492

别再到处找资源了!WinCC 7.5 SP2官方下载与Windows 10保姆级安装避坑指南

本文提供了WinCC 7.5 SP2在Windows 10上的官方下载与安装全流程指南,重点解决了资源获取难、系统兼容性问题及分卷压缩处理等常见痛点。通过详细的步骤和实用技巧,帮助用户顺利完成安装并优化配置,适用于工控领域的学习者和从业者。

weixin_32924297的博客 469

文件上传—阿里云OSS对象存储

阿里云OSS介绍及基本使用

m0_62909831的博客 2246

分布式光纤传感(DFOS)DTS/DAS/DSS 三合一:10公里管线监测实战与数据解读

本文详细介绍了分布式光纤传感(DFOS)技术在10公里管线监测中的实战应用,通过DTS(温度)、DAS(振动)、DSS(应变)三合一系统,实现对管线健康状态的立体感知。文章涵盖工程部署、数据采集、多物理量数据融合及噪声抑制等关键技术,展示了如何通过一根光纤完成复杂监测任务,显著提升管线安全性和维护效率。

weixin_29168153的博客 312

UE5 GAS 学习笔记 1.2游戏标签

这一节对GameplayTag游戏标签进行详细的讲解。

CloudHuCoding 1926

【SpringBoot实战系列】阿里云OSS接入上传图片实战

是在ApacheLicensev2.0下发布的对象存储服务器,学习成本低,安装运维简单,主流语⾔的客户端整合都有,号称最强的对象存储⽂件服务器,且可以和容器化技术docker/k8s等结合,社区活跃但不够成熟,业界参考资料较少。优点功能强⼤、可以根据业务做⼆次的定制,新⼀代分布式⽂件存储系统,容器化结合强⼤,更重要的是免费(购买磁盘、内存、带宽)阿⾥云⽤于各个产品的权限,基于RBAC、ACL模型都有,进⾏简单管理账号、统⼀分配权限、集中管控资源,从⽽建⽴安。安全、低成本、⾼持久的云存储服务。...

chandfy的博客 1689

YOLOv11架构革新:华为VanillaNet与BiFPN深度融合的突破性改进实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 134

阿里云存储OSS的概述以及使用步骤(JAVA)

1、什么是对象存储OSS 阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%。 OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择

h20010320的博客 2561

Dify智能体开发:大语言模型(LLM)问题分类

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

王国平的博客 2245

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

基于实现数据文件 的阿里云OSS使用步骤(适用OSS Java SDK V1)

阿里云OSS Java SDK V1部署指南摘要 本文详细介绍了阿里云OSS Java SDK V1的部署流程,主要包含三个部分: 服务器申请:新用户可免费试用3个月OSS服务,通过官网完成实名认证后选择试用套餐。 服务器部署: 创建Bucket存储空间,设置名称和地域 关闭"阻止公共访问"以便开发测试(生产环境不建议) 后端部署: 申请AccessKey密钥 检查Java环境(需7+版本) 通过Maven添加SDK依赖 配置环境变量存储密钥 提供文件流上传测试代码示例 本文针对数据文件

2301_81520034的博客 633

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

探索对象存储:实际运用与对接指南

随着数据量的爆炸性增长,对象存储成为了许多企业和开发者存储非结构化数据的首选。本文将深入探讨对象存储的概念、优势,并提供一个实际运用对接的案例,帮助读者理解如何在自己的项目中集成对象存储服务。1. 引言 在数字化时代,数据已成为企业最宝贵的资产之一。对象存储以其灵活性、可扩展性和成本效益,成为处理大规模非结构化数据的理想选...

cnzzs的博客 559

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

阿里云OSS对象存储使用教程

阿里云OSS对象存储使用教程

小钟不想敲代码 4022

Java调用阿里云对象存储OSS

Java调用阿里云对象存储OSS一、准备二、新建Bucket三、AccessKey 管理四、开发初始化新建OSSClient 一、准备 没有注册阿里云账号的去注册账号并实名 没有开通对象存储OSS,开通对象存储OSS 阿里云官网:https://www.aliyun.com/ OSS控制台:https://oss.console.aliyun.com/ 新人福利会场:https://www.aliyun.com/1111/new?userCode=r85k1yor 二、新建Bucket 三、Access

用生命研发技术 4672

java引入阿里云oss存储教程(从创建账号到代码实现)

1,首先拥有阿里云oss账号2,找到对象存储服务后点击3,0元购买后,创建存储Bucket。

2501_92412206的博客 218

阿里云对象存储OSS的开通和使用

阿里云对象存储OSS的开通和使用 文章目录阿里云对象存储OSS的开通和使用一、开通阿里云OSS二、开通AccessKey三、项目实战 使用Java SDK操作OSS 一、开通阿里云OSS 1 进入阿里云官网,找到阿里云对象存储OSS入口 2 点击对象存储OSS 3 点击开通服务 4 同意协议,点击立即开通 5 点击管理控制台 6 点击创建Bucket 7 创建Bucket 8 上传文件 9 随便上传一张图片 10 现在可以查看图片,可以看到URL信息 二、开通AccessKey 1 点击

m0_46275020的博客 3465

阿里云对象存储OSS使用

一、申请对象存储OSS 为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。 1、开通“对象存储OSS”服务 (1)申请阿里云账号 (2)实名认证 (3)开通“对象存储OSS”服务 (4)进入管理控制台 2、创建Bucket 选择:标准存储或低频访问存储(根据实际需要)、公共读、其余功能一律不开通(开通要收费) 3、生成自己专属的访问权限的Access key,点击进入创建即可;后面当需要上传文件到OSS需要bucket名称、keyId和keySecret 二、Java后端

weixin_42453582的博客 1524

?阿里云-对象存储OSS-配置和使用(Java)。

阿里云对象存储OSS(Object Storage Service)是一种海量、安全、低成本、高可靠的云存储服务,适用于存储任意类型的文件。OSS提供RESTful API,支持多种编程语言SDK,Java开发者可以通过简单配置快速集成。

SlR_xk4f的博客 571

阿里云OSS文件上传_对象存储服务全流程

阿里云OSS是一款安全可靠、低成本的云存储服务,适用于存储各类文件。本文介绍了OSS的核心优势:可扩展性、数据持久性、成本效益和简化管理,并重点讲解了图片上传等典型场景的接入流程。详细步骤包括开通OSS服务、创建Bucket、配置权限、集成Java SDK、编写上传工具类等,最后通过示例演示了文件上传功能。文章为开发者提供了从零开始接入OSS的完整指南,适合需要快速实现云存储功能的项目参考。

bugMaker_0621的博客 1728

SpringBoot集成阿里云存储OSS服务

该文章简单的介绍一下阿里云的OSS存储,然后演示如何在SpringBoot项目中集成OSS,每一步操作都记录好了 文章目录前言一、pandas是什么?总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 总结 ...

weixin_47316183的博客 7552
上一篇: JAVA生成二维码QRcode
下一篇: JAVA操作阿里云视频点播资源迁移及回溯校验
message丶小和尚
博客等级 码龄10年 1万+粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

message丶小和尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值