public override string SavePrivate(string domain, string path, System.IO.Stream stream, DateTime expires) { using var storage = GetStorage(); var objectKey = MakePath(domain, path); var buffered = TempStream.GetBuffered(stream); var uploadObjectOptions = new UploadObjectOptions { PredefinedAcl = PredefinedObjectAcl.BucketOwnerFullControl }; buffered.Position = 0; var uploaded = storage.UploadObject(_bucket, MakePath(domain, path), "application/octet-stream", buffered, uploadObjectOptions, null); uploaded.CacheControl = string.Format("public, maxage={0}", (int)TimeSpan.FromDays(5).TotalSeconds); uploaded.ContentDisposition = "attachment"; if (uploaded.Metadata == null) { uploaded.Metadata = new Dictionary <string, string>(); } uploaded.Metadata["Expires"] = DateTime.UtcNow.Add(TimeSpan.FromDays(5)).ToString("R"); uploaded.Metadata.Add("private-expire", expires.ToFileTimeUtc().ToString(CultureInfo.InvariantCulture)); storage.UpdateObject(uploaded); using var mStream = new MemoryStream(Encoding.UTF8.GetBytes(_json ?? "")); var preSignedURL = FromServiceAccountData(mStream).Sign(RequestTemplate.FromBucket(_bucket).WithObjectName(MakePath(domain, path)), UrlSigner.Options.FromExpiration(expires)); //TODO: CNAME! return(preSignedURL); }
public File <string> SaveFile(File <string> file, Stream fileStream) { if (fileStream == null) { throw new ArgumentNullException("fileStream"); } ICloudFileSystemEntry entry = null; if (file.ID != null) { entry = ProviderInfo.Storage.GetFile(MakePath(file.ID), null); } else if (file.FolderID != null) { var folder = GetFolderById(file.FolderID); file.Title = GetAvailableTitle(file.Title, folder, IsExist); entry = ProviderInfo.Storage.CreateFile(folder, file.Title); } if (entry == null) { return(null); } try { entry.GetDataTransferAccessor().Transfer(TempStream.GetBuffered(fileStream), nTransferDirection.nUpload); } catch (SharpBoxException e) { var webException = (WebException)e.InnerException; if (webException != null) { var response = ((HttpWebResponse)webException.Response); if (response != null) { if (response.StatusCode == HttpStatusCode.Unauthorized || response.StatusCode == HttpStatusCode.Forbidden) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_Create); } } throw; } } if (file.ID != null && !entry.Name.Equals(file.Title)) { file.Title = GetAvailableTitle(file.Title, entry.Parent, IsExist); ProviderInfo.Storage.RenameFileSystemEntry(entry, file.Title); } return(ToFile(entry)); }
public Uri Save(string domain, string path, Stream stream, string contentType, string contentDisposition, ACL acl, string contentEncoding = null, int cacheDays = 5) { var buffered = TempStream.GetBuffered(stream); if (QuotaController != null) { QuotaController.QuotaUsedCheck(buffered.Length); } var mime = string.IsNullOrEmpty(contentType) ? MimeMapping.GetMimeMapping(Path.GetFileName(path)) : contentType; using var storage = GetStorage(); var uploadObjectOptions = new UploadObjectOptions { PredefinedAcl = acl == ACL.Auto ? GetDomainACL(domain) : GetGoogleCloudAcl(acl) }; buffered.Position = 0; var uploaded = storage.UploadObject(_bucket, MakePath(domain, path), mime, buffered, uploadObjectOptions, null); uploaded.ContentEncoding = contentEncoding; uploaded.CacheControl = string.Format("public, maxage={0}", (int)TimeSpan.FromDays(cacheDays).TotalSeconds); if (uploaded.Metadata == null) { uploaded.Metadata = new Dictionary <string, string>(); } uploaded.Metadata["Expires"] = DateTime.UtcNow.Add(TimeSpan.FromDays(cacheDays)).ToString("R"); if (!string.IsNullOrEmpty(contentDisposition)) { uploaded.ContentDisposition = contentDisposition; } else if (mime == "application/octet-stream") { uploaded.ContentDisposition = "attachment"; } storage.UpdateObject(uploaded); // InvalidateCloudFront(MakePath(domain, path)); QuotaUsedAdd(domain, buffered.Length); return(GetUri(domain, path)); }
public override Uri Save(string domain, string path, Stream stream) { Log.Debug("Save " + path); var buffered = TempStream.GetBuffered(stream); if (QuotaController != null) { QuotaController.QuotaUsedCheck(buffered.Length); } if (path == null) { throw new ArgumentNullException("path"); } if (buffered == null) { throw new ArgumentNullException("stream"); } //Try seek to start if (buffered.CanSeek) { buffered.Seek(0, SeekOrigin.Begin); } //Lookup domain var target = GetTarget(domain, path); CreateDirectory(target); //Copy stream //optimaze disk file copy long fslen; if (buffered is FileStream fileStream) { File.Copy(fileStream.Name, target, true); fslen = fileStream.Length; } else { using var fs = File.Open(target, FileMode.Create); buffered.CopyTo(fs); fslen = fs.Length; } QuotaUsedAdd(domain, fslen); Crypt.EncryptFile(target); return(GetUri(domain, path)); }
public Uri Save(string domain, string path, Stream stream, string contentType, string contentDisposition, ACL acl, string contentEncoding = null, int cacheDays = 5, DateTime?deleteAt = null, long?deleteAfter = null) { var buffered = TempStream.GetBuffered(stream); if (QuotaController != null) { QuotaController.QuotaUsedCheck(buffered.Length); } var client = GetClient(); var mime = string.IsNullOrEmpty(contentType) ? MimeMapping.GetMimeMapping(Path.GetFileName(path)) : contentType; if (mime == "application/octet-stream") { contentDisposition = "attachment"; } var customHeaders = new Dictionary <string, string>(); if (cacheDays > 0) { customHeaders.Add("Cache-Control", string.Format("public, maxage={0}", (int)TimeSpan.FromDays(cacheDays).TotalSeconds)); customHeaders.Add("Expires", DateTime.UtcNow.Add(TimeSpan.FromDays(cacheDays)).ToString()); } if (deleteAt.HasValue) { var ts = deleteAt.Value - new DateTime(1970, 1, 1, 0, 0, 0); var unixTimestamp = (long)ts.TotalSeconds; customHeaders.Add("X-Delete-At", unixTimestamp.ToString()); } if (deleteAfter.HasValue) { customHeaders.Add("X-Delete-After", deleteAfter.ToString()); } if (!string.IsNullOrEmpty(contentEncoding)) { customHeaders.Add("Content-Encoding", contentEncoding); } var cannedACL = acl == ACL.Auto ? GetDomainACL(domain) : ACL.Read; if (cannedACL == ACL.Read) { try { using (var emptyStream = TempStream.Create()) { var headers = new Dictionary <string, string> { { "X-Object-Manifest", string.Format("{0}/{1}", _private_container, MakePath(domain, path)) } }; // create symlink client.CreateObject(_public_container, emptyStream, MakePath(domain, path), mime, 4096, headers, _region ); emptyStream.Close(); } client.PurgeObjectFromCDN(_public_container, MakePath(domain, path)); } catch (Exception exp) { _logger.InfoFormat("The invalidation {0} failed", _public_container + "/" + MakePath(domain, path)); _logger.Error(exp); } } stream.Position = 0; client.CreateObject(_private_container, stream, MakePath(domain, path), mime, 4096, customHeaders, _region ); QuotaUsedAdd(domain, buffered.Length); return(GetUri(domain, path)); }