阿里云oss服务通用类
在webconfig中配置信息
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="AccessKey" value="你的key"/>
<add key="AccessKeySecret" value="你的秘钥"/>
<add key="EndPointHangzhou" value="oss-cn-hangzhou.aliyuncs.com"/>
<add key="BucketName" value="webfile"/>
<add key="DomainImg" value="映射你的服务器"/>
<add key="DomainFiles" value="映射你的服务器"/>
</appSettings>
</configuration>
官方文档:https://help.aliyun.com/document_detail/31947.html
public class AliyunOssHelper
{
private static string _accessKey;
private static string _accessKeySecret;
private static string _endPoint;
private static string _bucketName;
private static string _domainImag;
private static string _domainFile;
private OssClient ossClient;
private static bool _doesBucketExist;
private static readonly object _locker = new object();
public AliyunOssHelper()
{
try
{
_accessKey = ConfigHelper.AccessKey;
_accessKeySecret = ConfigHelper.AccessKeySecret;
_endPoint = ConfigHelper.EndPointHangzhou;
_bucketName = ConfigHelper.BucketNameFx110;
_domainImag = ConfigHelper.DomainImg;
_domainFile = ConfigHelper.DomainFiles;
ossClient = new OssClient(_endPoint, _accessKey, _accessKeySecret);
CheckbucketName(_bucketName);
}
catch (Exception ex)
{
}
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="key"></param>
/// <param name="filename"></param>
/// <returns></returns>
public string UploadFile(String key, String filePath, short fileType)
{
try
{
FileStream ReadStream = File.Open(filePath, FileMode.Open);
ObjectMetadata objectMeta = new ObjectMetadata
{
//设置内容长度
ContentLength = ReadStream.Length
};
PutObjectResult result = ossClient.PutObject(_bucketName, key, ReadStream, objectMeta);
if (result.HttpStatusCode == HttpStatusCode.OK)
{
ReadStream.Close();
if(fileType == 4) { return GetFileUrl(key); }
return GetImgUrl(key);
}
ReadStream.Close();
return "上传失败";
}
catch (Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 大文件上传
/// </summary>
/// <param name="key"></param>
public String MutiPartUpload(string key, string filePath, short fileType)
{
try
{
InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(_bucketName, key);
InitiateMultipartUploadResult initResult = ossClient.InitiateMultipartUpload(initRequest);
// 设置每块为 5M
int partSize = 1024 * 1024 * 5;
FileInfo partFile = new FileInfo(filePath);
// 计算分块数目
int partCount = (int)(partFile.Length / partSize);
if (partFile.Length % partSize != 0)
{
partCount++;
}
// 新建一个List保存每个分块上传后的ETag和PartNumber
List<PartETag> partETags = new List<PartETag>();
for (int i = 0; i < partCount; i++)
{
// 获取文件流
FileStream fis = new FileStream(partFile.FullName, FileMode.Open);
// 跳到每个分块的开头
long skipBytes = partSize * i;
fis.Position = skipBytes;
//fis.skip(skipBytes);
// 计算每个分块的大小
long size = partSize < partFile.Length - skipBytes ?
partSize : partFile.Length - skipBytes;
// 创建UploadPartRequest,上传分块
UploadPartRequest uploadPartRequest = new UploadPartRequest(_bucketName, key, initResult.UploadId);
uploadPartRequest.InputStream = fis;
uploadPartRequest.PartSize = size;
uploadPartRequest.PartNumber = (i + 1);
UploadPartResult uploadPartResult = ossClient.UploadPart(uploadPartRequest);
// 将返回的PartETag保存到List中。
partETags.Add(uploadPartResult.PartETag);
// 关闭文件
fis.Close();
}
CompleteMultipartUploadRequest completeReq = new CompleteMultipartUploadRequest(_bucketName, key, initResult.UploadId);
foreach (PartETag partETag in partETags)
{
completeReq.PartETags.Add(partETag);
}
//完成分块上传
CompleteMultipartUploadResult completeResult = ossClient.CompleteMultipartUpload(completeReq);
//返回最终文件的MD5,用于用户进行校验
if (completeResult.HttpStatusCode == HttpStatusCode.OK)
{
//return completeResult.Location;
if (fileType == 4) { return GetFileUrl(key); }
return GetImgUrl(key);
}
return "上传失败";
}
catch (Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 下载文件
/// </summary>
/// <param name="key"></param>
/// <param name="filePath"></param>
/// <returns></returns>
public ObjectMetadata DownloadFile(String key, String filePath)
{
GetObjectRequest downloadRequest = new GetObjectRequest(_bucketName, key);
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate);
downloadRequest.SetRange(1000, 5000);
var result = ossClient.GetObject(downloadRequest, fs);
return result;
}
/// <summary>
/// 获取Bucket列表
/// </summary>
/// <returns></returns>
public string GetBucketsList()
{
string result = "";
try
{
IEnumerable list = ossClient.ListBuckets();
foreach (Bucket bt in list)
{
result += string.Format("名称:{0};创建日期:{1}", bt.Name, bt.CreationDate.ToString());
}
}
catch (OssException ex)
{
result = string.Format("创建失败。错误代码:{0}; 错误消息:{1}。\nRequestID:{2}\tHostID:{3}",
ex.ErrorCode,
ex.Message,
ex.RequestId,
ex.HostId);
}
return result;
}
/// <summary>
/// 获取Bucket中的文件列表
/// </summary>
/// <param name="bucketName"></param>
/// <returns></returns>
public string GetObjectlist(string bucketName)
{
string result = "";
try
{
ObjectListing list = ossClient.ListObjects(bucketName);
IEnumerable<OssObjectSummary> objects = list.ObjectSummaries;
foreach (OssObjectSummary ob in objects)
{
if (ob.Key.LastIndexOf('/') != ob.Key.Length - 1)
result += string.Format("文件名:{0} 文件大小: {1}", ob.Key, GetSize(ob.Size));
}
}
catch (OssException ex)
{
result = string.Format("创建失败。错误代码:{0}; 错误消息:{1}。\nRequestID:{2}\tHostID:{3}",
ex.ErrorCode,
ex.Message,
ex.RequestId,
ex.HostId);
}
return result;
}
/// <summary>
/// 获取文件大小
/// </summary>
/// <param name="size"></param>
/// <returns></returns>
public string GetSize(long size)
{
if (size > 1024 * 1024)
return size / (1024 * 1024) + "." + (size % (1024 * 1024)) / 1024 + "MB";
else if (size > 1024)
return size / 1024 + "." + (size % 1024) / 10 + "KB";
else
return size + "字节";
}
/// <summary>
/// 删除一个Object
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string DeleteObject(string obj)
{
try
{
ossClient.DeleteObject(_bucketName, obj);
return string.Format("删除成功!文件:" + obj);
}
catch (OssException ex)
{
return (string.Format("删除失败。错误代码:{0}; 错误消息:{1}。\nRequestID:{2}\tHostID:{3}",
ex.ErrorCode,
ex.Message,
ex.RequestId,
ex.HostId));
}
}
/// <summary>
/// 删除一个Bucket和其中的Objects
/// </summary>
public void DeleteBucket()
{
ObjectListing ol = ossClient.ListObjects(_bucketName);
List<OssObjectSummary> listDeletes = new List<OssObjectSummary>(ol.ObjectSummaries);
//listDeletes.AddRange(ol.ObjectSummaries);先构造后添加也可以
foreach (OssObjectSummary s in listDeletes)
{
//遍历每个Bucket下ObjectName
String ObjectName = s.Key;
//删除指定bucket下的Bucket下的ObjectName
ossClient.DeleteObject(_bucketName, ObjectName);
}
//删除bucket
ossClient.DeleteBucket(_bucketName);
}
/// <summary>
/// 获取url
/// </summary>
/// <param name="fullName"></param>
/// <returns></returns>
string GetImgUrl(string fullName)
{
if (string.IsNullOrWhiteSpace(_domainImag))
{
return $"http://{_bucketName}.{_endPoint}/{fullName}";
}
return _domainImag + "/" + fullName;
}
/// <summary>
/// 获取文件url
/// </summary>
/// <param name="fullName"></param>
/// <returns></returns>
string GetFileUrl(string fullName)
{
if (string.IsNullOrWhiteSpace(_domainFile))
{
return $"http://{_bucketName}.{_endPoint}/{fullName}";
}
return _domainFile + "/" + fullName;
}
/// <summary>
/// 检查buket存在
/// </summary>
/// <param name="bucketName"></param>
void CheckbucketName(String bucketName)
{
try
{
if (!_doesBucketExist && !ossClient.DoesBucketExist(bucketName))
{
lock (_locker)
{
if (!_doesBucketExist && !ossClient.DoesBucketExist(bucketName))
ossClient.CreateBucket(bucketName);
}
_doesBucketExist = true;
}
}
catch (Exception e)
{
}
}
}
阿里云oss服务通用类的更多相关文章
- Python使用阿里云OSS服务
Python使用阿里云OSS服务 前言: 在远程搭建了一个平台,通过改远程平台进行数据的采集,需要将数据内容传送至本地进行处理:为了实现该功能,考虑了阿里云的OSS对象储存的服务. 40G包月只需1元 ...
- angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)
2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...
- ECS上nginx搭建反向代理通过内网访问阿里云OSS服务
对于付不起钱的小伙计,为了给公司省钱,想尽一切招数.今天就来分享一个使用阿里云OSS存储搭配CDN使用的网站服务器部署方法. 简介 阿里云OSS 阿里云提供的一种文件存储方案,和我们以前接触的百度云B ...
- 物联网架构成长之路(18)-接阿里云OSS服务
1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 ...
- 阿里云OSS服务开通STS安全令牌
搭建直传服务需要完成以下准备工作: 开通OSS,并且创建Bucket. 开通STS服务. 登录 OSS管理控制台. 在OSS概览页中找到基础配置区域,单击 安全令牌,如下图所示: 进入到 安全令牌快捷 ...
- 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
分片上传(结合element-ui的upload组件实现自定义上传) async uploadFree(content){ let data = await this.getOssToken(); / ...
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
- thinkphp使用阿里云OSS最新SDK,文件部署
这文章是建立在你已经注册号阿里云的OSS,和创建好Bucket前提下: 其实阿里云的帮助与文档写的很详细,这里只说一下源码方式 1.phpsdk下载地址(摘自阿里云OSS的帮助与文档)(也有我自己下载 ...
- ThinkPHP5使用阿里云OSS图片上传
1.下载OSS文件放在网站根目录下(OSS文件下载地址:https://gitee.com/jth1234/oss_files.git) 2.在入口文件中加载OSS 3.config文件配置oss信息 ...
随机推荐
- centos 6.5 配置ssh免登录
生成密匙: ssh-keygen -t rsa 会生成 id_rsa id_rsa.pub id_rsa:私匙 id_rsa.pub:公匙 配置当前机器免登录: cp id_rsa.pub auth ...
- python中从内部循环直接跳出多层循环
学习循环的时候碰到一道题,需要从内部循环中直接跳出所有循环,想了很久终于想到一种好办法(小白认知) 题目为:使用while循环输出100-50,从大到小,到50时,再循环输出0-50,从小到大. ex ...
- 海港(NOIP2016)
题目链接:海港 这一题怎么样呢?还好吧,也不是太难,没有用到什么特殊的算法,但写法还是很值得学习的.下面讲一下思路: 我们维护三个队列(这里我们采用自己手写的队列,因为这比STL的要快,不过这一题,S ...
- Java语法基础课 动手动脑
1.枚举类型 它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. 枚举类型不是java原有数据类型 2.为什么double类型的数值进行运算得不到“数学上精确”的结果? 我们给出的数值,在 ...
- timerfd与eventfd
1.timerfd timerfd是定时器描述符,通过timerfd_create()来创建它,timerfd_settime()来设置定时器时间,当时间到期定时器文件描述符就可读,所以能够在sele ...
- Windows 下 Quartus 检测不到 USB-Blaster 终极解决办法
转自https://blog.csdn.net/acang301/article/details/50471067?locationNum=12 一.Windows无法正常驱动USB-Blaster ...
- AngularJS实战之路由ui-view传参
angular路由传参 首页 <!DOCTYPE html> <html ng-app="app"> <head> <title>路 ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记一之铭文升级版
第一章:课程介绍 铭文一级: VMware Fusion Mac上搭建:为了给大家演示如何使用我们的OOTB环境 Hadoop环境:虚拟机,我是远程登录 Mac 那么就不需要使用我们的OOTB环境 V ...
- 19) maven 项目结构:聚集
Project Aggregation [,æɡrɪ'ɡeɪʃən] https://maven.apache.org/guides/introduction/introduction-to-the- ...
- (最优m个候选人 和他们的编号)Jury Compromise (POJ 1015) 难
http://poj.org/problem?id=1015 Description In Frobnia, a far-away country, the verdicts in court t ...