使用阿里云OSS上传文件

本文介绍如何利用Java API操作阿里云OSS对象存储。

1.控制台操作

首先介绍一下阿里云OSS对象存储的一些基本概念。

1.1 进入对象存储界面

登录阿里云账号,进入对象存储界面,如图所示。

进入后如图所示。

1.2 OSS基本概念

这里不过多介绍如何在阿里云上传下载文件,这些操作基本上点一点都能找到。

1.2.1 Bucket

Bucket实质就是阿里云OSS对象存储的一个存储空间,按照计算机理解的话可以理解为一个磁盘(不知道这样比喻是否恰当)。

创建桶的过程很简单,如图所示,填写对应内容即可。

这里需要注意,不同分区的Endpoint是不同的,Endpoint在后续API使用过程中会用到。至于存储类型和读写权限相关设置,都结合自身情况来使用,这里以标准存储和私有权限为例进行介绍。

1.2.2 AccessKey

AccessKey是访问阿里云API的秘钥,这里也需要提前创建一份,创建后我们需要记住自己的AccessKey ID和Access Key Secret,如果忘记可以在如图位置查询。

2 API使用

2.1 API地址

一般使用对象存储无非就是上传和下载文件,完整API地址如下:

https://help.aliyun.com/document_detail/32015.html?spm=5176.8466032.bucket-object.1.33ac1450TuX65y

2.2 API使用准备

Java使用很简单,直接在Maven中引用依赖,如下:

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>

2.3 构建OSSClient实例

这里就需要用到我们上面提到的endpoint和AccessKey,构建实例内容如下所示。

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 使用刚刚创建的accessKeyId和accessKeySecret
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

//todo 对OSS进行操作

// 关闭OSSClient。
ossClient.shutdown();

2.4 上传文件

上传文件常用的方式大致为两种,一种是返回可以查看文件的地址,另外一种是通过地址可以直接下载文件。

2.4.1 上传文件,返回可以预览图片的地址

上传文件有一些需要注意的地方:

  • 1.文件名不要重复,不然会覆盖。
  • 2.建议将不同日期的文件分别创建一个文件夹方便区分。

这里先以上传本地桌面的一个图片为例,上传后在Bucket内自动创建日期格式yyyyMMdd的文件夹存放文件,文件名按照当前时间戳加随机数的形式拼接,由于返回的URL是带有签名信息的,所以这里暂时设置过期时间为一小时,如果需要可以将时间加长。

完整内容如下所示:

package com.dalaoyang.upload;

import com.aliyun.oss.OSSClient;

import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;

public class AliyunUpload {

    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        String accessKeyId = "LTAIRr3alAhROGTA";
        String accessKeySecret = "******";
        String fileName = "/Users/dalaoyang/Desktop/aliyun.jpeg";
        String bucketName = "dalaoyang-test";
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 生成上传文件名
        String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
        String objectName = sdf.format(new Date()) + "/" + finalFileName;
        File file = new File(fileName);
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

        ossClient.putObject(bucketName, objectName, file);
        // 设置URL过期时间为1小时。
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
        // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
        ossClient.shutdown();
        System.out.println(url.toString());
    }
}

返回地址格式如下:

http://dalaoyang-test.oss-cn-beijing.aliyuncs.com/20190518/1558155342968407.jpeg?Expires=1558158948&OSSAccessKeyId=LTAIRr3alAhROGTA&Signature=%2BIjVpD%2BTWrRmSt4kU7axo6Cnqbw%3D

浏览器访问如图所示:

在阿里云OSS中查看如图所示,可以看到文件夹也对应的创建了。

2.4.2 上传文件,返回可以直接下载图片的地址

这个和上面其实类似,如果需要返回可以直接下载的地址的话,只要设置一下文件的contentDisposition为attachment;即可,完整内容如下:

package com.dalaoyang.upload;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;

import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;

public class AliyunUpload {

    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        String accessKeyId = "LTAIRr3alAhROGTA";
        String accessKeySecret = "******";
        String fileName = "/Users/dalaoyang/Desktop/WechatIMG4.png";
        String bucketName = "dalaoyang-test";
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 生成上传文件名
        String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
        String objectName = sdf.format(new Date()) + "/" + finalFileName;
        File file = new File(fileName);

        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentDisposition("attachment;");
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

        ossClient.putObject(bucketName, objectName, file, meta);
        // 设置URL过期时间为1小时。
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
        // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
        ossClient.shutdown();
        System.out.println(url.toString());
    }
}

这次返回的地址在浏览器访问直接下载下来了文件。

3 小结

对于阿里云OSS操作还是有很多玩法的,比如上传下载带进度条,分段上传等等,需要的话可以根据场景去玩。

原文地址:https://www.cnblogs.com/dalaoyang/p/10885424.html

时间: 2024-10-25 00:47:51

使用阿里云OSS上传文件的相关文章

阿里云OSS上传文件模块

1 package com.hughes.bcsc.app.core.util.oss; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.IOExceptio

阿里云OSS上传文件本地调试跨域问题解决

问题描述: 最近后台说为了提高上传效率,要前端直接上传文件到阿里云,而不经过后台.因为在阿里云服务器设置的允许源(region)为某个固定的域名下的源(例如*.cheche.com),直接在本地访问会有跨域问题. 解决方案: 在本机C:\Windows\System32\drivers\etc的hosts文件中(使用管理员身份打开并编辑)添加一行地址映射:127.0.0.1 test.cheche.com 然后把前端运行项目的端口改为80,以vue项目为例(config/index.js) 到这

阿里云oss上传文件

方法一 使用 web interface 上传 方法二 使用 oss browser 官方客户端软件上传,支持桌面操作系统,首次打开时输入 appid 和 secret 登陆,预设 oss 路径为 oss://oef,地域选深圳. 登陆后可上传文件. 方法三 使用 oss util 官方命令行工具上传,可以通过 cron 定时任务实现定期上传.备份等. 首先下载 ossutil64 这个可执行文件(不同系统名字可能不一样),使用方法为首先创建配置文件(修改id 和 secret): cat <<

阿里云OSS 上传文件

阿里云后台管理.API 集成教程.Key/ 域名的查询 1.查看上传的文件在哪? a .百度阿里云,进入官网.然后进入管理控制台 b.左侧菜单栏,进入对象存储 OSS c.进入 Bucket 管理页面,点击创建的bucket 名称 d.进入bucket 管理界面,点击左侧菜单 bucket属性 菜单查看bucket 域名 object 管理  查看管理上传的文件 图片处理   查看图片域名地址 2.查看accessKey  和 screctKey 3.集成 OSS  sdk下载地址和API  地

【记录】java 阿里云OSS上传文件

参考地址:http://www.macrozheng.com/#/architect/mall_arch_10?id=oss 参考地址:https://help.aliyun.com/document_detail/31927.html 参考地址:https://help.aliyun.com/document_detail/91868.html 原文地址:https://www.cnblogs.com/wbl001/p/12301504.html

阿里云服务器上传文件失败

最近一直在学习WEB方面的内容,自己做了一个练习站,也没了个阿里云服务作为测试,过程中遇到了不少情况! 首先,由于我用的是ThinkPHP框架,遇到的第一个大麻烦便是上传的内容不能显示在界面上,提示有关于runtime的问题,同时,当我需要上传更多的文件时出现了偶尔成功但大多失败的情况,flashFXP提示553Could not create file.招了好多资料都没有看到什么好的建议或者解决办法,只是明确了问题的根本在于文件的权限.根据好心人提示修改目录权限,我干脆直接把整个目录文件的权限

Qt客户端阿里云服上传文件

整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://help.aliyun.com/document_detail/32131.html?spm=5176.doc32139.6.768.JIh6Dh (如果地址不对,可以在阿里云的帮助文档中找) 2.安装vs2010或以上版本,目的是为了编译生成oss_c_sdk.lib静态链接库 操作步骤: 1.将下

项目总结56:阿里云OSS上传的图片被自动旋转问题解决

问题:上传图片到阿里云OSS,再再HTML标签使用OSS图片路径,展示的图片被自动旋转了:但是将图片图片路径直接浏览器打开,是原始没有旋转过的: 解决方案: 阿里云文档已经说明了解决方案,链接:https://help.aliyun.com/document_detail/44691.html?spm=a2c4g.11186623.6.1160.1c5d149dByJ2yu 原因是某些手机拍摄出来的照片可能带有旋转参数(存放在照片exif信息里面),img处理图片是会识别这个旋转参数 即在URL

如何获取阿里云OSS上每个文件夹的大小

原文 https://help.aliyun.com/document_detail/88458.html?spm=a2c4g.11186623.2.11.792462b15oU02q OSS文件按照字母顺序排列.Python SDK提供了一系列列举文件及获取指定目录下文件大小的方法. 简单列举 以下代码用于列举指定存储空间下的10个文件: # -*- coding: utf-8 -*- import oss2 from itertools import islice # 阿里云主账号Acces