使用aliyun的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是带有签名信息的,所以这里暂时设置过期时间为一小时,如果需要可以将时间加长。
完整内容如下所示:
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;即可,完整内容如下:
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操作还是有很多玩法的,比如上传下载带进度条,分段上传等等,需要的话可以根据场景去玩。
使用aliyun的oss服务器上传照片的更多相关文章
- 服务器上传文件到oss,以及备份
公司的前端js,css是发布到oss的,所以要求后台在发布的同时先把即将要覆盖的文件备份到服务器上 步骤是先上传文件到服务器,服务器上传到oss服务器之前先备份相同文件名的文件 public clas ...
- Thinkphp整合阿里云OSS图片上传实例
Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...
- OSS文件上传及OSS与ODPS之间数据连通
场景描述 有这样一种场景,用户在自建服务器上存有一定数量级的CSV格式业务数据,某一天用户了解到阿里云的OSS服务存储性价比高(嘿嘿,颜值高),于是想将CSV数据迁移到云上OSS中,并且 ...
- 阿里云OSS图片上传plupload.js结合jq-weui 图片上传的插件
项目中用到了oss上传,用的plupload,奈何样式上不敢恭维,特别是放在移动端上使用.于是自己把它移植到了jq weui的上传图片组件上. 更改:选择照片后确认即及时上传至oss服务器,不限制上传 ...
- 记一次阿里云oss文件上传服务假死
引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- OSS网页上传和断点续传(OSS配置篇)
OSS网页上传和断点续传主要根据BrowserJS-SDK和相关文档整理而得,快速构建OSS上传应用 一.Bucket设置 浏览器中直接访问OSS需要开通Bucket的CORS设置 将allowed ...
- js实现oss文件上传及一些问题
关于兼容性问题,ie8以下的可以使用4.x的版本 一.引入sdk和jq <script src="http://libs.baidu.com/jquery/2.0.0/jquery.m ...
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
随机推荐
- 【Spring Cloud学习之一】微服务架构
一.网站架构模式发展 单体应用-->SOA-->微服务 1.分布式项目与项目集群分布式项目:根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程 ...
- 使用HOSTNAMECTL配置主机名
hostnamectl工具是用来管理给定主机中. 查看所有主机名 请运行下面的命令查看所有当前主机名: 〜] $ hostnamectl status 如果未指定任何选项,默认则使用status选项对 ...
- 实现简单的string类
摘要 实现了一个string类,包括基本的构造.赋值.判断.大小写等. String API Constructors string(); string(const char& ch); st ...
- centos7 替换为 aliyun 源
1.打开centos的yum文件夹 输入命令cd /etc/yum.repos.d/ 2.用wget下载repo文件 输入命令wget http://mirrors.aliyun.com/repo ...
- ThinkPHP3(结构,路由,模板的调用,后台搭建,系统常量)
ThinkPHP的结构如下: 在ThinkPHP\Library\Think文件夹中,几个重要的文件 1.App.class.php 框架核心类文件 2.Think.class.php 每次请求都要执 ...
- JS系列:数据类型详细讲解
ctrl+B加粗 ### 数据类型: - 1.number数字类型 NaN:not a number 不是一个数 ,但他是数字类型 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字 ...
- python快速开始一-------常见的数据类型
前置条件:已经安装好python程序 常用的数据类型 Python常见的数据类型: 整数:就是我们数学里面的整数,比如3455,python目前支持最大的32bit或者64bit 长整数(long): ...
- 013 ECMAScript基础应用
1.ECMAScript概述 (1)前端的发展历程 <1>web 1.0时代 最初的网页以HTML为主,是纯静态的网页.网页是只读的,信息流只能从服务的到客户端单向流通.开发人员也只关心页 ...
- SGU 126. Boxes --- 模拟
<传送门> 126. Boxes time limit per test: 0.25 sec. memory limit per test: 4096 KB There are two b ...
- 微信公众号开发 token 验证程序
<?php traceHttp(); define("TOKEN", "gmll001"); $wechatObj = new wechatCallbac ...