博客
关于我
电商项目——如何上传文件到阿里云的OSS中?
阅读量:323 次
发布时间:2019-03-04

本文共 2973 字,大约阅读时间需要 9 分钟。

阿里云对象存储(OSS)的上传与使用方法

  • 上传文件到阿里云的两种方法
  • 在实际项目中,我们需要将文件上传到阿里云的OSS中,并获取其访问地址。以下是两种常见的上传方法:

    第一种方法:文件上传到应用服务器再传至OSS

    这种方法的优点是文件的上传路径与我们的应用服务器有关,服务器可以使用阿里云账号和密码进行上传。虽然服务器会承担部分流量,但这种方式的安全性较高,因为账号和密码不会被直接暴露。

    第二种方法:直接用浏览器上传至OSS

    这种方法的优点是减少了服务器的流量压力,但需要注意账号密码的安全性。可以通过服务端签名的方式,确保上传过程的安全性。

    1. OSS的整合测试与使用
    2. 为了测试OSS的功能,我们可以使用阿里云提供的Java SDK进行操作。以下是使用Maven项目进行依赖配置和代码实现的步骤:

      (1)在Maven项目中添加OSS依赖在project pom.xml中添加以下依赖项:

      com.aliyun.oss
      aliyun-sdk-oss
      3.10.2

      (2)配置访问权限在应用程序中配置OSS的访问端点、AccessKey ID和AccessKey Secret。例如,在application.properties文件中添加如下配置:

      alibaba.cloud.access-key=your-akalibaba.cloud.secret-key=your-skalibaba.cloud.oss.endpoint=***

      (3)编写OSS客户端代码创建OSS客户端并上传文件。以下是一个简单的Java代码示例:

      OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);try {PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, new ByteArrayInputStream(content.getBytes()));ossClient.putObject(putObjectRequest);} finally {ossClient.shutdown();}

      1. 服务端签名后直传
      2. 为了增强安全性,我们可以通过服务端签名的方式实现文件的直接上传。具体步骤如下:

        (1)创建服务端签名控制器编写一个Spring Boot控制器类,负责生成签名和令牌。以下是一个示例:

        @RestControllerpublic class OSSController {@Value("${spring.cloud.alicloud.access-key}")private String accessId;@Value("${spring.cloud.alicloud.secret-key}")private String accessKey;@Value("${spring.cloud.alicloud.oss.endpoint}")private String endpoint;@Value("${spring.cloud.alicloud.oss.bucket}")private String bucket;

        @RequestMapping("/oss/policy")public Map
        policy(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey); try { long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes("utf-8"); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = ossClient.calculatePostSignature(postPolicy); Map
        respMap = new LinkedHashMap<>(); respMap.put("accessid", accessId); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("dir", dir); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); return respMap; } catch (Exception e) { System.out.println(e.getMessage()); } finally { ossClient.shutdown(); } return null;}

        }

        (2)配置网关在网关中配置路由,将前端的文件上传请求转发到服务端签名控制器。例如:

        http://localhost:88/api/thirdparty/oss/policy

        (3)使用签名上传前端可以直接使用获取到的签名和令牌进行文件上传,确保上传过程的安全性。

        通过以上方法,我们可以在项目中实现阿里云OSS的文件上传功能,确保文件的安全性和高效性。

    转载地址:http://wzhq.baihongyu.com/

    你可能感兴趣的文章
    python判断文件是空的,如果是空的,就删除
    查看>>
    python判断密码是否正确_python密码判断是否符合要求的方法
    查看>>
    python判断字符串包含中文_Python 判断字符串是否包含中文
    查看>>
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
    查看>>
    python列表前几个_python之列表
    查看>>
    python列表元组
    查看>>
    Python列表/元组/字典和集合使用
    查看>>
    python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
    查看>>
    python列表
    查看>>
    python列出当前目录、子目录和文件的脚本
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
    查看>>
    Python切片对象和__getitem__
    查看>>
    python+flask计算机毕业设计高校体育竞赛成绩管理系统的设计与实现(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
    查看>>