Beispiel #1
0
 public override void Delete(CloudFile cloudFile)
 {
     string filePath = Path.Combine(this.rootPath, cloudFile.FullUniqueName());
     if (File.Exists(filePath))
     {
         File.Delete(filePath);
     }
 }
Beispiel #2
0
 public override void Delete(CloudFile cloudFile)
 {
     connector.Delete(cloudFile.FullUniqueName());
 }
Beispiel #3
0
 public override void Copy(CloudFile source, CloudFile target)
 {
     EnsureFolder(target.FullDirectory());
     connector.Copy(source.FullUniqueName(), target.FullUniqueName());
 }
Beispiel #4
0
        private void WriteSingleFile(CloudFile cloudFile, Stream stream, Action callback = null)
        {
            string url = string.Format(Baidu.PcsUploadUrl, token, FormatPath(cloudFile.FullUniqueName()));

            var response = HttpHelper.HttpUploadFileForString(url, stream, 0,
                () =>
                {
                    logger.InfoFormat("Writing baidu file [{0}], {1}% of {2}MB",
                        cloudFile.Name,
                        Math.Round((double)stream.Position * 100 / stream.Length, 2),
                        Math.Round((double)(stream.Length / 1024 / 1024)));
                    if (callback != null)
                        callback();
                }
                );
        }
Beispiel #5
0
        private string CreateSuperFile(CloudFile cloudFile, string[] blocks)
        {
            string url = string.Format(Baidu.PcsCreateSuperfileUrl, token, FormatPath(cloudFile.FullUniqueName()));

            StringBuilder json = new StringBuilder();
            json.Append("{\"block_list\":[");
            for (int i = 0; i < blocks.Length; i++)
            {
                if (i > 0)
                {
                    json.Append(",");
                }
                json.AppendFormat("\"{0}\"", blocks[i]);
            }
            json.Append("]}");

            var buffer = Encoding.ASCII.GetBytes("param=" + HttpUtility.UrlEncode(json.ToString()));

            using (MemoryStream stream = new MemoryStream())
            {
                stream.Write(buffer, 0, buffer.Length);
                stream.Position = 0;
                return HttpHelper.HttpPostForString(url, stream);
            }
        }
Beispiel #6
0
        public Stream Read(CloudFile cloudFile, Action<long, long> callback)
        {
            var path = FormatPath(cloudFile.FullUniqueName());
            string url = string.Format(Baidu.PcsDownloadUrl, token, path);
            long finished = 0;
            DateTime lastLog = DateTime.MinValue;

            var httpResponse = new HttpWebResponseWrapper(HttpHelper.HttpGet(url),
                p =>
                {
                    if (callback != null)
                    {
                        callback(p, cloudFile.CloudSize);
                    }
                    finished += p;
                    if ((DateTime.Now - lastLog).TotalMilliseconds > 3000 || finished >= cloudFile.CloudSize)
                    {
                        logger.InfoFormat("Baidu reading [{0}], [{1}% of {2}MB]",
                            cloudFile.FullUniqueName(),
                            Math.Round((decimal)finished * 100 / cloudFile.CloudSize),
                            Math.Round((decimal)cloudFile.Size / 1024 / 1024, 2)
                            );
                        lastLog = DateTime.Now;
                    }
                });

            string tempFileName = Path.GetTempFileName();
            var result = File.Create(tempFileName, 1024 * 4, FileOptions.DeleteOnClose);
            httpResponse.CopyTo(result);
            return result;
        }
Beispiel #7
0
        public void Write(CloudFile cloudFile, Stream stream, OnProgress onProgress = null)
        {
            PropertyParser.FormatProperties(cloudFile);
            var sameFile = cache.GetFileByFingerprint(cloudFile.Fingerprint);
            if (sameFile == null && !string.IsNullOrEmpty(cloudFile.MD5))
            {
                sameFile = cache.GetFileByFingerprint(cloudFile.MD5);
            }
            if (sameFile != null)
            {
                logger.InfoFormat("Find same file, using copy instead of write. {0}", cloudFile.FullUniqueName());
                Copy(sameFile, cloudFile);
            }
            else
            {
                RealWrite(cloudFile, stream, onProgress);
            }

            cache.AddItem(cloudFile);
        }
Beispiel #8
0
 public override Stream Read(CloudFile cloudFile, OnProgress onProgress)
 {
     string filePath = Path.Combine(this.rootPath, cloudFile.FullUniqueName());
     return new FileStream(filePath, FileMode.Open, FileAccess.Read);
 }
Beispiel #9
0
        protected override void RealWrite(CloudFile cloudFile, Stream stream, OnProgress onProgress)
        {
            var path = Path.Combine(this.rootPath, cloudFile.FullUniqueName());

            string directory = Path.GetDirectoryName(path);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            using (FileStream targetFileStream = new FileStream(path, FileMode.OpenOrCreate))
            {
                stream.CopyTo(targetFileStream);
            }
            File.SetLastWriteTime(path, cloudFile.Timestamp);
        }