CSFramework.WebApi框架实现阿里云OSS上传、下载、删除文件功能
CSFramework.WebApi框架实现阿里云OSS上传、下载、删除文件功能
阿里OSS在CSFramework.WebApi开发框架应用 APP项目有个新需求,用户提交的认证图片要存储到阿里OSS(阿里云对象存储服务),原来的接口是存储到APP服务器的。存储在OSS的图片可以通过OSS的域名管理将用户自己的域名绑定到 OSS 域名上,并支持 CDN 一键加速,这样可以直接通过域名访问OSS图片,比如:www.您的域名.com/ossimage/key.png,key对应OSS.key,唯一的文件名。 实现步骤: 1. 创建Cmd_AliOSSDemo命令层,继承CmdBaseAction命令层基类。 C# Code: [CommandAttribute(811001, "阿里对象存储服务(OSS)上传、下载、删除文件")] public class Cmd_AliOSSDemo : CmdBaseAction { private ModelAliOSS_Config _OssConfig; private OssClient _OssClient; public override object ClientData { get { return null; } } public Cmd_AliOSSDemo(HttpRequestMessage httpRequest, IUserRequestAction userRequest) : base(httpRequest, userRequest) { _Operations.Add("Get");//获取图片,返回图片URL数组 _Operations.Add("Put");//上传图片,每次上传1张图片 _Operations.Add("Del");//删除图片,每次删除1张图片 //阿里OSS配置 _OssConfig = new ModelAliOSS_Config { Bucket = "MyBucket", Endpoint = "oss-cn-shenzhen.aliyuncs.com", Key = "zLTAI6dmbcawzYpd= - 您的公钥", KeySecret = "3qeQ7TqMEHIr9k1Apu76ljlLezxzB3 - 您的私钥" }; _OssClient = new OssClient(_OssConfig.Endpoint, _OssConfig.Key, _OssConfig.KeySecret); } // //省略代码.... // } //来源:C/S框架网(www.csframework.com) QQ:23404761 C# Code: public override IUserResponse Execute() { #region 上传文件 if (this.EqualsOP(_UserRequest.Operation, "Put")) { ModelAliOSS_Put model = GetRequestData<ModelAliOSS_Put>(_UserRequest); return Put(model); } #endregion #region 获取文件 if (this.EqualsOP(_UserRequest.Operation, "Get")) { return Get(_UserRequest.Data); } #endregion #region 删除文件 if (this.EqualsOP(_UserRequest.Operation, "Del")) { return Del(_UserRequest.Data); } #endregion return new ModelResponse() { Message = ErrorCodes.UnknowOperation_Msg, Code = ErrorCodes.UnknowOperation }; } //来源:C/S框架网(www.csframework.com) QQ:23404761 3. 实现三个具体的操作。 Put:上传文件 Del:删除文件 Get:下载文件 C# Code: internal IUserResponse Put(ModelAliOSS_Put model) { //获取根目录 string root = WebApiFileTool.GetRootPath(this.GetType().Assembly); root = Path.Combine(root, "osstmp"); //创建临时目录,用于保存临时文件 if (!Directory.Exists(root)) Directory.CreateDirectory(root); string fileName = Path.Combine(root, model.FileNameGUID); if (SaveFileFromBase64String(model.FileBase64, fileName)) { try { //开始上传文件 PutObjectResult result = _OssClient.PutObject(_OssConfig.Bucket, model.FileNameGUID, fileName); return new ModelResponse { Code = 0, Data = result.ETag, Message = "上传文件成功" }; } catch (Exception ex) { return new ModelResponse { Code = -1, Data = "", Message = ex.Message }; } finally { if (File.Exists(fileName)) File.Delete(fileName); } } else { return new ModelResponse { Code = -1, Data = "", Message = "Base64String转换OSS文件失败!" }; } } internal IUserResponse Get(string key) { try { var obj = _OssClient.GetObject(_OssConfig.Bucket, key); byte[] bs = StreamToBytes(obj.ResponseStream); var base64 = Convert.ToBase64String(bs); return new ModelResponse { Code = 0, Data = base64, Message = "操作成功" }; } catch (Exception ex) { return new ModelResponse { Code = -1, Data = "", Message = ex.Message }; } } internal IUserResponse Del(string key) { try { _OssClient.DeleteObject(_OssConfig.Bucket, key); return new ModelResponse { Code = 0, Data = "", Message = "删除文件操作成功" }; } catch (Exception ex) { return new ModelResponse { Code = -1, Data = "", Message = ex.Message }; } } //来源:C/S框架网(www.csframework.com) QQ:23404761 C# Code: /// <summary> /// 上传文件模型 /// </summary> public class ModelAliOSS_Put { /// <summary> /// 对应vw_Ali_OSS_Type,如:电子回单 = 20 /// </summary> public string OSS_Type { get; set; } /// <summary> /// 文件类型,对应vw_Ali_OSS_ItemType,如: 营业执照 = 5, /// </summary> public string OSS_ItemType { get; set; } /// <summary> /// 关联单据号码, 货源单号或者托运单号,如运输单号,如:YD0102384111001 /// </summary> public string RefDocNo { get; set; } /// <summary> /// 文件内容,Base64String /// </summary> public string FileBase64 { get; set; } /// <summary> /// 文件名,GUID32位全局唯一,如:409B018C-7525-4234-AAD9-5CB9508D293C.jpg /// </summary> public string FileNameGUID { get; set; } /// <summary> /// 文件描述 /// </summary> public string FileDesc { get; set; } /// <summary> /// 上传用户编号或手机号 /// </summary> public string UploadUser { get; set; } } //来源:C/S框架网(www.csframework.com) QQ:23404761 阿里OSS接口的参数模型: C# Code: /// <summary> /// 阿里云提供的OSS配置 /// </summary> public class ModelAliOSS_Config { public string Bucket { get; set; } public string Endpoint { get; set; } public string Key { get; set; } public string KeySecret { get; set; } } //来源:C/S框架网(www.csframework.com) QQ:23404761 base64String转文件: C# Code: /// <summary> /// base64String转文件 /// </summary> /// <param name="base64String">文件内容</param> /// <param name="saveFileName">文件名</param> /// <returns></returns> private bool SaveFileFromBase64String(string base64String, string saveFileName) { try { var contents = Convert.FromBase64String(base64String); using (var fs = new FileStream(saveFileName, FileMode.Create, FileAccess.Write)) { fs.Write(contents, 0, contents.Length); fs.Flush(); } return File.Exists(saveFileName); } catch { return false; } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 流对象内容转字节: C# Code: /// <summary> /// 流对象内容转字节 /// </summary> /// <param name="stream"></param> /// <returns></returns> public static byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begin); return bytes; } //来源:C/S框架网 | www.csframework.com | QQ:23404761 扫一扫加微信:
参考文档:
Asp.Net FileUpload类实现上传文件(C/S框架网开源) 在C/S框架网下载Demo版要权限和注册吗? C/S框架精简版-演示程序下载 C/S框架标准版SQL2000数据库下载(VIP) C/S框架标准版数据库脚本下载(VIP) C/S框架网示例程序数据库下载(不断更新) C/S快速开发框架 - 代码自动生成视频下载 C#.Net CS快速开发框架- 新增业务模块(视频下载) C#.Net CS开发框架实现多语言(C/S框架网) 业务单据上下级权限控制实现 C/S框架-WebService架构下分页查询数据解决方案 CS系统框架 - 负载均衡(Load Balancing)源码下载 CSFramework.WebApi框架快速搭建后端服务支持APP、B/S、C/S、微信小程序、公众号、Web客户端 关于CSFramework.WebApi框架NuGet程序包版本升级版本统一问题 ASP.NET WebApi框架异步实现MultipartContent方式上传文件
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |