对象存储本身是没有文件夹概念的!所以存储文件的路径均为文件名!
如uploads/panos/2017/0303/064b5e1798d34a17/b/l1/01/l1_b_01_01.jpg 其中的.jpg前均为文件名!
所以文件上传也就没有文件夹概念了 上传文件只能通过检索完成,配合《ASP.NET 文件夹及文件检索》完成上传!
经测试125个子目录722个碎片图片总大小10.6MB!上传环境理论512K上传速度!用时99471ms!效率不算太快,凑活用!后期可以改为并发分块上传!
阿里云的OSS C#SDK可以采用官网下载也支持NeGut下载!
建立一个aliyunconfig.cs的类文件!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Aliyun.OSS;namespace AppBox.Business
{
public class AliOssConfig
{
public static string AccessKeyId = “控制面板获取”;public static string AccessKeySecret = “控制面板获取”;
public static string Endpoint = “http://oss-cn-shanghai.aliyuncs.com”;//华东2
public static string BucketName = “BK的名字”;//华东2
//#region 新建一个Bucket
///// <summary>
///// 新建一个Bucket
///// </summary>
//void CreateBucket(string bucketName)
//{
// OssClient ossClient = new OssClient(Endpoint, AccessKeyId, AccessKeySecret);// var bucket = ossClient.CreateBucket(bucketName);
//}
//#endregion/// <summary>
/// 进行对象存储
/// </summary>
/// <param name=”bucketName”>bucket名称</param>
public static string PutObject(string OldFile,string NewObjKey)
{
OssClient ossClient = new OssClient(Endpoint, AccessKeyId, AccessKeySecret);//定义文件流
var objStream = new System.IO.FileStream(OldFile, System.IO.FileMode.OpenOrCreate);
//定义 object 描述
var objMetadata = new ObjectMetadata();
var objKey = NewObjKey;//执行 put 请求,并且返回对象的MD5摘要。
var putResult = ossClient.PutObject(BucketName, objKey, objStream, objMetadata);return putResult.ETag;
}/// <summary>
/// 获取一个存储对象
/// </summary>
/// <param name=”bucketName”>bucket名称</param>
/// <param name=”objKey”>对象标识名称</param>
void GetObject(string bucketName, string objKey)
{
OssClient ossClient = new OssClient(Endpoint, AccessKeyId, AccessKeySecret);//获取对象
var obj = ossClient.GetObject(BucketName, objKey);
//获取Object的输入流
var objStream = obj.Content;//怎么处理数据流,您看着办吧。
//…//最后关闭数据流。
objStream.Close();
}}
}
使用 Business.AliOssConfig.PutObject(本地文件绝对路径, 存储对象的相对路径); 进行调用
//本地路径转换成URL相对路径
private string urlconvertor(string imagesurl1)
{
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string imagesurl2 = imagesurl1.Replace(tmpRootDir, “”); //转换成相对路径
imagesurl2 = imagesurl2.Replace(@”\”, @”/”);
//imagesurl2 = imagesurl2.Replace(@”Aspx_Uc/”, @””);
return imagesurl2;
}//相对路径转换成服务器本地物理路径
private string urlconvertorlocal(string imagesurl1)
{
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string imagesurl2 = tmpRootDir + imagesurl1.Replace(@”/”, @”\”); //转换成绝对路径
return imagesurl2;
}