阿里云上传下载API接口使用,及EF的使用

来源:互联网 发布:恋恋有词软件 编辑:程序博客网 时间:2024/06/04 11:01
--阿里云上传下载API接口使用
相关资料地址:https://help.aliyun.com/document_detail/oss/sdk/dotnet-sdk/install.html?spm=5176.docoss/sdk/dotnet-sdk/preface.6.357.SHx0qW
1.在开始编程前需要引用Aliyun.OSS.dll,可以直接在阿里官网下载,也可以通过NuGet安装。
2.在阿里的官方网站上,对于上传和下载都有简单的示例代码。
3.通过普通的PutObject方法上传的文件最大不能超过5GB,不然报错,通过Multipart分片上传的
大小不能超过48.8TB,几乎没有限制。
4.Multipart分片上传也可以支持断点上传。
断点分片异步上传的实现:
基本的实现方式官网都有,下面是自己需要注意或修改的一点东西
在分片上传时,需要首先创建InitiateMultipartUploadRequest实例对象,然后使用InitiateMultipartUpload方法,得到一个UploadId,这个Id是一个在阿里中长期存在的Id,对应着每次的分片上传事件,除非在上传完成后调用完成分片上传方法client.CompleteMultipartUpload或者调用取消分片上传方法AbortMultipartUpload,这个Id才会消失。所以,我们可以通过client.ListMultipartUploads方法得到空间上所有的未完成的分片上传事件,然后通过key获得上次上传对应的UploadId,之后在根据已获得的UploadId调用client.ListParts方法,就可以获得上次上传的片信息了,得到的是一个Part的集合,Part中有一个PartNumber属性,这是上一次分片上传成功的片是第PartNumber份,可以用于跳过已上传成功的内容,还有一个ETag是用于校验的。最终是使用client.BeginUploadPart进行异步上传到阿里云端。还有一点要说明的是,当我们获取到上次上传成功的Parts后记得要把这些片加入到本次的partETags集合中,不然将不是断点上传,而是将整个文件大小加到了上次上传的文件大小中。
4.下载的话官网也是都有示例的,调用GetObject方法就好。
断点下载和断点分片下载的实现:
这两个功能都是通过官网分片下载的示例所修改的。
断点下载:只是将下载文件分为两片,下载完成片和未下载片。之后不说了。

断点分片下载:这个可以获得下载进度,实现进度条。就是将未下载的片经行分片下载,并追加到本地已下载的文件后面。


--Entity Framework(EF)的使用:从代码类到数据库
1.安装Entity Framework
在NuGet中搜索Entity Framework,进行安装。
2.定义实体类
给属性加上一些特定的描述如[Key],在数据库中就是主键,[Required],在数据库中就是必填。
3.定义数据库连接对象类,要继承DbContext类
这个类就是代表着一个数据库,而类中的属性就代表着数据库中的表
class UserDB : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<UserGroup> UserGroup { get; set; }
    }
4.在配置文件中添加数据库的配置节点
<!--EF建立数据库-->
  <connectionStrings>
    <add name="UserDB" providerName="System.Data.SqlClient" connectionString="Server=.;DataBase=XinEFTest;Trusted_Connection=true;" />
  </connectionStrings>
5.开始创建库
UserDB db = new UserDB();// 创建库,此时的db就是数据库中的库
var ug = new UserGroup()// 创建记录
{
    ID = 1,
    GroupName = "Admin"
};
db.UserGroup.Add(ug);// 向表中添加记录
db.SaveChanges();// 保存更爱


--从数据库到代码类
在新建项中选择数据-ADO.NET实体数据模型-来自数据库的EF设计器(VS2015是这个)-一直下一步,选择数据库中需要的对象,如表,视图等,然后类就生成好了。

在Dal层使用EF访问数据库时,需要先引用EF,不然报错

”using 语句中使用的类型必须可隐式转换为“System.IDisposable”
在需要分页时,可以使用已经封装的方法,skip()和take(),且必须先使用order()方法排序,代码如:

        public List<Boutique_Activity> GetActivityInfo(int activityType, int pageIndex, int pageSize, out int intTotalCount)        {            List<Boutique_Activity> listResult = new List<Boutique_Activity>();            using (BoutiqueActivityEntities activityEntityies = new BoutiqueActivityEntities())            {                intTotalCount = activityEntityies.Boutique_Activity.Where(t => t.Study_Type == activityType).Count();                listResult = activityEntityies.Boutique_Activity.Where(t => t.Study_Type == activityType).OrderBy(t => t.Study_Date).Skip(pageSize * pageIndex).Take(pageSize).ToList();            }            return listResult;        }
其中BoutiqueActivityEntities是根据EF生成的:

namespace WeiXinH5Models{    using System;    using System.Data.Entity;    using System.Data.Entity.Infrastructure;        public partial class BoutiqueActivityEntities : DbContext    {        public BoutiqueActivityEntities()            : base("name=BoutiqueActivityEntities")        {        }            protected override void OnModelCreating(DbModelBuilder modelBuilder)        {            throw new UnintentionalCodeFirstException();        }            public virtual DbSet<Boutique_Activity> Boutique_Activity { get; set; }    }}



0 0