阿里云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)
{
}
}
}

原文地址:https://www.cnblogs.com/liuzhangxi2018/p/9345572.html

时间: 2024-08-03 18:58:43

阿里云oss服务通用类的相关文章

Python使用阿里云OSS服务

Python使用阿里云OSS服务 前言: 在远程搭建了一个平台,通过改远程平台进行数据的采集,需要将数据内容传送至本地进行处理:为了实现该功能,考虑了阿里云的OSS对象储存的服务. 40G包月只需1元:-) 甚至还有客服致电给你,说有问题可直接通过电话联系对方,15星好评 OSS安装 关于账号注册,开通服务等等功能直接去阿里云的官方进行相应操作即可 安装python-devel win:此过程不需要,在安装Python时已经包含了: Debian/Ubuntu:apt-get install p

angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值 //<setting name="accessKeyId" value="H6JSh0Y****z2cGa" /> //<setting name="ecr

阿里云OSS服务体验

我是一名PHPer,从事后台的一切开发.话说不会服务器基本运维和操作,尤其是Linux系统,不是一个合格PHPer.刚好我们公司又没有专门的运维工程师,所以平时的运维工作就大包小包地落在我身上了. 我们现在的产品是微信公众号-老玩童享福,线上的活动主要有:视频健康任务(每天做任务打卡).每日五道题选择题.每日猜猜(回复关键词答案).百日行动(关于健康方面的活动,每天做任务打卡,模式仿新东方百日行动).商城(接入有赞的商城).文体秀活动(包括有奖答题和文艺投票,覆盖河北所有地级市,分别有石家庄.唐

物联网架构成长之路(18)-接阿里云OSS服务

1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 1 <!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --> 2 <dependency> 3 <groupId>com.aliyun.oss</groupId> 4 &

Java下载https文件上传到阿里云oss服务

今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 实现自己的证书信任管理器类 /** * @author mazhq * @Title: X509TrustUtiil * @ProjectName: zeus * @Description: 证书信任管理器类 * @date 2019/2/18 15:14 */ public class X509TrustUtil implements X509TrustManager { @Overr

阿里云 OSS

原文:https://help.aliyun.com/ 阿里云 OSS 阿里云 OSS(Object Storage Service)为您提供基于网络的数据存取服务.使用 OSS,您可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种结构化或非结构化数据文件. 在使用阿里云 OSS 之前,您需要了解 OSS 的几个基本概念.阿里云 OSS 将数据文件以对象(object)的形式上传到存储空间(bucket)中. 您可以创建一个或者多个存储空间,然后向每个存储空间中添加一个或多个文件.

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github地址:https://github.com/aliyun/aliyun-oss-php-sdk 2.复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS,如图1.2 复制aliyun-os

netcore3.1增加阿里云OSS云存储服务

问题描述:由于最近的项目访问量有点大,决定部署到两天服务器,做负载的同时问题也发现了,之前的程序附件上传是上传到程序根目录的,由于做了负载,网站访问的资源就得看运气了,多刷几次才能访问的到,于是乎干脆把资源文件都放到oss上面. 解决方案:先说一下整体思路,前台是jquery的,页面加载获取osstoken,有效期是10分钟,获取时候传个参数,后台根据参数判断文件存放位置,返回加密的token,前台拿到token就能给阿里云oss上传附件了.阿里云文档还是比较健全的,找了几个开源的源码关于oss

ECStore图片存储采用阿里云OSS(图片存储)服务

主要功能:ECStore图片存储采用阿里云OSS(图片存储)服务   适用版本:ECStore 授权方式:授权域名使用,付费插件 联系方式: QQ 275553385  mail: [email protected]