阿里云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信息 ...
随机推荐
- QueryRunner类的八种结果处理集
package cn.jy.demo; import java.sql.Connection; import java.sql.SQLException; import java.util.List; ...
- Python3实战系列之一(获取印度售后数据项目)
问题:公司在印度开设生产工厂并在当地销售手机,生产.销售系统均由印度开发维护.对总部需要的售后数据,采用每日在ftp上提供一个.xlsx文件,给总部使用.总部需要将此数据导入到总部的销量统计系统中,以 ...
- Spring Boot学习笔记:kafka应用
Kafka作为众多Java消息中间件之一,有诸多优点.本文讲解Kafka的应用.学习一个新的知识点,建议先找一个demo,越简单越好的demo,跑通这个demo,了解大致原理,然后在分析细节,详细了解 ...
- SpringBoot 多环境配置
转载:https://www.cnblogs.com/gdpuzxs/p/7191436.html 在我们的实际开发中,一般都有三套环境,开发环境,测试环境,生产环境,三套环境的数据库连接配置也有所不 ...
- 【WebService】WebService之CXF的拦截器(五)
CXF拦截器介绍 CXF拦截器是功能的主要实现单元,也是主要的扩展点,可以在不对核心模块进行修改的情况下,动态添加功能.当服务被调用时,会经过多个拦截器链(Interceptor Chain)处理,拦 ...
- Django的学习(一)————初入django
一.基本指令 1.项目的建立: Django的项目建立,进入目录,打开cmd输入 django-admin startproject[项目名称],注意如果是在其他文件下把项目设计成资源文件. 2.Ap ...
- Windows下用curl命令
一开始自己是下载curl的可执行文件来弄的,发现中文会乱码: 按照网上的用chcp 65001后中文还是乱码,蒙逼中. 后来直接用git bash执行curl,发现git bash自带了这个命令:(可 ...
- ArcMap等值面
先说一下题目,ArcMap中没有由栅格直接生成等值面的功能,但由栅格直接生成等值线的功能存在,可通过如下方式得到等值面: 1.提取等值线 由dem直接提取等值线:Spatial Analyst Too ...
- 《深入浅出MFC》系列之动态创建
/*************************************************************************************************** ...
- POJ3181--Dollar Dayz(动态规划)
Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. ...