public override void Delete(CloudFile cloudFile) { string filePath = Path.Combine(this.rootPath, cloudFile.FullUniqueName()); if (File.Exists(filePath)) { File.Delete(filePath); } }
public override void Delete(CloudFile cloudFile) { connector.Delete(cloudFile.FullUniqueName()); }
public override void Copy(CloudFile source, CloudFile target) { EnsureFolder(target.FullDirectory()); connector.Copy(source.FullUniqueName(), target.FullUniqueName()); }
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(); } ); }
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); } }
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; }
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); }
public override Stream Read(CloudFile cloudFile, OnProgress onProgress) { string filePath = Path.Combine(this.rootPath, cloudFile.FullUniqueName()); return new FileStream(filePath, FileMode.Open, FileAccess.Read); }
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); }