• 图片或文件上传阿里云服务


     //图片上传到阿里云
            [AcceptVerbs(HttpVerbs.Post)]
            public JsonResult Upload(HttpPostedFileBase fileData, string tupianming)
            {
                if (fileData != null)
                {
                    try
                    {
                        // 文件上传后的保存路径         
                        var extName = Path.GetExtension(fileData.FileName);
                        if (string.IsNullOrWhiteSpace(extName))
                        {
                            return Json(new { Success = false, Message = "extName is null!" });
                        }
                        var extNameToLower = extName.ToLower();       
                        var accessId = System.Configuration.ConfigurationManager.AppSettings["ossKeyId"];
                        var accessKey = System.Configuration.ConfigurationManager.AppSettings["ossKeySectet"];
                        var bucketName = "xiaoyaodijun"; //System.Configuration.ConfigurationManager.AppSettings["bucketName"];
                        var endpoint = "http://oss-cn-qingdao.aliyuncs.com ";
                        var extenname = ".oss-cn-qingdao.aliyuncs.com/";
                        //图片的存储路径和名字
                        var fileName = "xiaoyao/124" + extNameToLower;
                        OssClient client = new OssClient(endpoint, accessId, accessKey);
                        System.IO.Stream inputStream = fileData.InputStream;
                        ObjectMetadata objectMetadata = new ObjectMetadata();
                        client.PutObject(bucketName, fileName, inputStream, objectMetadata);
                        //返回图片路径
                        AccessControlList bucketAcl = client.GetBucketAcl(bucketName);                 
                        var result = ((!bucketAcl.Grants.Any()) ? client.GeneratePresignedUri(bucketName, fileName, System.DateTime.Now.AddMinutes(5.0)).AbsoluteUri : string.Format("http://{0}{1}{2}", bucketName, extenname, fileName));
                        inputStream.Dispose();
    
                    }
                    catch (Exception ex)
                    {
                        return Json(new { Success = false, Message = ex.Message });
                    }
                }
                else
                {
                    return Json(new { Success = false, Message = "请选择要上传的文件!" });
                }
    
                return null;
            }

    第二

    Step 1. 初始化一个OSSClient
    OSSClient是与OSS服务交互的客户端,SDK的OSS操作都是通过OSSClient完成的。
    
    下面代码新建了一个OSSClient:
    
    
    using Aliyun.OpenServices.OpenStorageService;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace AliyunTest
    {
        class Program
        {
            static readonly string accessKeyId = "AccessKeyId";
            static readonly string accessKeySecret = "AccessKeySecret";
            //关于这个endPoint,可以参考:http://bbs.aliyun.com/read/149100.html?spm=5176.7189909.0.0.YiwiFw
            static readonly string endPoint = "http://oss-cn-beijing.aliyuncs.com";
    
            static void Main(string[] args)
            {
                //初始化 OSSClient
                OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret);
    
                //使用代码...
            }
        }
    }
    Step 2. 新建Bucket
    Bucket是OSS上的命名空间,相当于数据的容器,可以存储若干数据实体(Object)。
    
    你可以按照下面的代码新建一个Bucket:
    
    
        /// <summary>
            /// 新建存储对象容器Bucket
            /// </summary>
            /// <param name="bucketName">容器名称</param>
            void CreateBucket(string bucketName)
            {
                //初始化 OSSClient
                OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret);
    
                // 新建一个Bucket
                var bucket = ossClient.CreateBucket(bucketName);
    
                Console.WriteLine(bucket.CreationDate);
            }
    复制代码
    /// <summary>
            /// 进行对象存储
            /// </summary>
            /// <param name="bucketName">bucket名称</param>
            void PutObject(string bucketName)
            {
                //初始化 OSSClient
                OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret);
    
                //定义文件流
                var objStream = new System.IO.FileStream("D:\example\test.jpg", System.IO.FileMode.OpenOrCreate);
                //定义 object 描述
                var objMetadata = new ObjectMetadata();
                var objKey = "test.jpg";
    
                //执行 put 请求,并且返回对象的MD5摘要。
                var putResult = ossClient.PutObject(bucketName, objKey, objStream, objMetadata);
    
                Console.WriteLine(putResult.ETag);
            }
    Object通过InputStream的形式上传到OSS中。在上面的例子里我们可以看出,每上传一个Object,都需要指定和Object关 联的ObjectMetadata。ObjectMetaData是用户对该object的描述,由一系列name-value对组成;其中 ContentLength是必须设置的,以便SDK可以正确识别上传Object的大小。
    
    Put Object请求处理成功后,OSS会将收到文件的MD5值放在返回结果的ETag中。用户可以根据ETag检验上传的文件与本地的是否一致。
    /// <summary>
            /// 获取一个存储对象
            /// </summary>
            /// <param name="bucketName">bucket名称</param>
            /// <param name="objKey">对象标识名称</param>
            void GetObject(string bucketName, string objKey)
            {
                //初始化 OSSClient
                OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret);
    
                //获取对象
                var obj = ossClient.GetObject(bucketName, objKey);
                //获取Object的输入流
                var objStream = obj.Content;
    
                //怎么处理数据流,您看着办吧。
                //...
    
                //最后关闭数据流。
                objStream.Close();
            }

    文章来源:http://www.cnblogs.com/easeyeah/p/4109584.html

     三:大文件分块上传

     //切块上传大文件到阿里云
            private void button4_Click(object sender, EventArgs e)
            {
                OpenFileDialog dia = new OpenFileDialog();
                dia.ShowDialog();
                var filePath = dia.FileName;
                var name = dia.SafeFileName;
                UploadBigFile(filePath, name);
            }
    
            public void UploadBigFile(string filepath, string name)
            {
                var accessId = "mqPwT*****Jw1paW";
                var accessKey = "GM63rs2adiXu******69nSm";
                var bucketName = "xiao***un";
                //oss所在的地区
                var endpoint = "http://oss-cn-qingdao.aliyuncs.com ";
                var extenname = ".oss-cn-qingdao.aliyuncs.com/";
                //后缀
                var extName = Path.GetExtension(filepath);
                var fileName = "xiaoyaofile/" + name;
                OssClient client = new OssClient(endpoint, accessId, accessKey);
    
    
                InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(bucketName, fileName);
                InitiateMultipartUploadResult initiateMultipartUploadResult = client.InitiateMultipartUpload(initiateMultipartUploadRequest);
    
                int partSize = 1024 * 1024 * 1;
                FileInfo fi = new FileInfo(filepath);
                int partCount = (int)(fi.Length / partSize);
                if (fi.Length % partSize != 0)
                {
                    partCount++;
                }
    
                List<PartETag> partETags = new List<PartETag>();
                for (int i = 0; i < partCount; i++)
                {
                    FileStream fis = File.Open(filepath, FileMode.Open);
                    long skipbytes = partSize * i;
                    fis.Seek(skipbytes, SeekOrigin.Begin);
                    long size = partSize < fi.Length - skipbytes ? partSize : fi.Length - skipbytes;
    
                    UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, fileName, initiateMultipartUploadResult.UploadId);
                    uploadPartRequest.InputStream = fis;
                    uploadPartRequest.PartSize = partSize;
                    uploadPartRequest.PartNumber = i + 1;
    
                    UploadPartResult uploadPartResult = client.UploadPart(uploadPartRequest);
                    partETags.Add(uploadPartResult.PartETag);
    
                    fis.Close();
                    var k = (Convert.ToDouble(i)) / partCount;
                    textBox2.Text = (k * 100).ToString();
    
                }
    
                CompleteMultipartUploadRequest completeMultipartUploadRequest =
                     new CompleteMultipartUploadRequest(bucketName, fileName, initiateMultipartUploadResult.UploadId);
                if (completeMultipartUploadRequest.PartETags != null)
                {
                    for (int i = 0; i < partETags.Count; i++)
                    {
                        completeMultipartUploadRequest.PartETags.Add(partETags[i]);
                    }
                }
                CompleteMultipartUploadResult completeMultipartUploadResult =
                        client.CompleteMultipartUpload(completeMultipartUploadRequest);
            }
  • 相关阅读:
    (二分查找 拓展) leetcode 69. Sqrt(x)
    (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
    (链表) lintcode 219. Insert Node in Sorted Linked List
    (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
    (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
    (字符串 数组 递归 双指针) leetcode 344. Reverse String
    (二叉树 DFS 递归) leetcode 112. Path Sum
    (二叉树 DFS 递归) leetcode 101. Symmetric Tree
    (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
    (二叉树 递归 DFS) leetcode 100. Same Tree
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/4582361.html
Copyright © 2020-2023  润新知