zoukankan      html  css  js  c++  java
  • 图片或文件上传阿里云服务

     //图片上传到阿里云
            [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);
            }
  • 相关阅读:
    十:audio 音频
    八: 操作提示(wxml 即将废弃)
    九: 操作提示(js版本)
    七: 表单标签(3)
    四: 基本标签
    五: 表单标签(1)
    六: 表单标签(2)
    webservice和wcf和web.api简单介绍
    Qt 中事件与处理
    Qt 事件过滤器
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/4582361.html
Copyright © 2011-2022 走看看