Exemplo n.º 1
0
 public PutObjectResponse PutObject(PutObjectRequest request)
 {
     return new PutObjectResponse(Requst(request));
 }
Exemplo n.º 2
0
        private void btnUpload_Click(object sender, EventArgs e)
        {
            btnUpload.Enabled = false;
            var bucketName = txtBucketName.Text;
            var keyID = txtKeyId.Text;
            var keySecret = txtKeySecret.Text;

            var path = txtFileName.Text;// args[0];
            //var path2 = @"d:\0.dat";
            //Console.WriteLine(path);
            var fileInfo = new FileInfo(path);
            var prefix = Path.GetFileNameWithoutExtension(fileInfo.Name);

            using (var f = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                var dealer = new FlvDealer(f);
                var head = dealer.Deal();
                var sengments = dealer.Segments;
                var start = (int)dealer.StartPosition;
                var end = (int)dealer.EndPosition;

                //using (var f2 = File.Open(path2, FileMode.Create, FileAccess.Write))
                //{
                //    f2.Write(head, 0, head.Length);
                //}

                //var section = AliyunSection.GetInstance();
                var client = new OssClient(txtKeyId.Text, txtKeySecret.Text);
                using (var ms = new MemoryStream(head))
                {
                    var headname = prefix + "/0.dat";
                    client.PutObject(new PutObjectRequest(txtBucketName.Text, headname, ms));
                    Console.WriteLine("{0}上传完成", headname);
                }

                f.Position = start;
                var positions = sengments["positions"] as MetaArray;
                var files = sengments["files"] as MetaArray;
                var ext = sengments["extension"].ToString();

                var tasks = new List<Task>();
                for (int i = 0; i < positions.Length; i++)
                {
                    //var bodyname = string.Format("{0}/{1}{2}", prefix, files[i], ext);
                    //client.PutObject(new PutObjectRequest(section.Oss.Bucket, bodyname, f, start, Convert.ToUInt32(positions[i]) - start));
                    //Console.WriteLine("{0}上传完成", bodyname);
                    //start = Convert.ToInt32(positions[i]);

                    var task = new Task(
                        (obj) =>
                        {
                            PutObjectRequest req;
                            string bodyname;

                            var j = (int)obj;
                            var position = Convert.ToInt32(positions[j]);
                            bodyname = string.Format("{0}/{1}{2}", prefix, files[j], ext);
                            var vStart = start;
                            if (j > 0)
                            {
                                vStart = Convert.ToInt32(positions[j - 1]);
                            }

                            req = new PutObjectRequest(
                                 txtBucketName.Text,
                                 bodyname,
                                 File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read),
                                 vStart,
                                Convert.ToUInt32(position - vStart));
                            Console.WriteLine("{0}  {1}  {2}", position, bodyname, vStart);
                            //start = position;

                            var res = client.PutObject(req);
                            Console.WriteLine("{0}上传完成", bodyname);

                        }, i);
                    //tasks.Last().ContinueWith(task);
                    Console.WriteLine(
                        tasks.Count(
                            t =>
                            t.Status == TaskStatus.Running || t.Status == TaskStatus.WaitingToRun
                            || t.Status == TaskStatus.WaitingForActivation));
                    tasks.RemoveAll(t => t.Status == TaskStatus.RanToCompletion);
                    //Console.WriteLine("移除{0}个", tasks.RemoveAll(t => t.Status == TaskStatus.RanToCompletion));
                    if (tasks.Count(t => t.Status == TaskStatus.Running || t.Status == TaskStatus.WaitingToRun || t.Status == TaskStatus.WaitingForActivation) >= 5)
                    {
                        Task.WaitAny(tasks.ToArray());
                    }
                    tasks.Add(task);
                    task.Start();
                }

                Task.WaitAll(tasks.ToArray());
                Console.WriteLine("上传完毕");
                MessageBox.Show("上传完毕", "提示");
                btnUpload.Enabled = true;
            }

            //var info = new FlvInfo(path2);
            //Console.WriteLine(info.Header.ToString());
            //Console.WriteLine("=============================================");
            //foreach (var tag in info.Body.Tags.Where(t => t.TagType == TagType.Meta))
            ////foreach (var tag in info.Body.Tags.Where(t => t.TagType == TagType.Video && ((t as VideoTag).Data as VideoData).Type == FrameType.KeyFrame))
            //{
            //    Console.WriteLine(tag.ToString());
            //    Console.WriteLine(tag.TagType.ToString());
            //    Console.WriteLine(tag.Header.ToString());
            //    if (tag.Data != null)
            //    {
            //        Console.WriteLine(tag.Data.ToString());
            //    }
            //    Console.WriteLine("=============================================");
            //    Console.ReadKey();

            //}
            //}
        }