public bool GetTenantDiscourseFileUrl(Tenant tenant, DiscoursePostVersionAttachment discoursePostVersionAttachment, out string url, out Exception exception) { var result = false; url = string.Empty; exception = null; try { var connectionString = tenant.StorageConnectionStringPrimary; var account = CloudStorageAccount.Parse(connectionString); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference("discourseexternaldocuments");// tenant.UrlResourceGroup); container.CreateIfNotExists(); container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Container, }); var blob = container.GetBlockBlobReference(discoursePostVersionAttachment.FileNameServer); url = blob.Uri.AbsoluteUri; result = true; } catch (Exception e) { exception = e; } return(result); }
public bool DiscourseDocumentUpload(TenantUserSession tenantUserSession, DiscoursePostVersionAttachment discourseDocument, Stream stream, CancellationToken cancellationToken, out Exception exception) { var result = false; exception = null; try { var connectionString = tenantUserSession.Tenant.StorageConnectionStringPrimary; var account = CloudStorageAccount.Parse(connectionString); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference("discourseexternaldocuments"); container.CreateIfNotExists(); container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Off, }); var blob = container.GetBlockBlobReference(discourseDocument.Id.ToString() + "." + GlobalConstants.FileExtensionCloud); var running = true; var watch = System.Diagnostics.Stopwatch.StartNew(); stream.Seek(0, SeekOrigin.Begin); blob.DeleteIfExists(DeleteSnapshotsOption.IncludeSnapshots); var task = blob.UploadFromStreamAsync(stream, cancellationToken); do { switch (task.Status) { case TaskStatus.Canceled: case TaskStatus.Faulted: case TaskStatus.RanToCompletion: { running = false; break; } } Thread.Sleep(TimeSpan.FromSeconds(1)); cancellationToken.ThrowIfCancellationRequested(); }while (running); switch (task.Status) { case TaskStatus.Faulted: case TaskStatus.Canceled: { running = false; throw (task.Exception ?? new Exception("The upload task encountered an unknown exception.")); } } result = true; } catch (Exception e) { exception = e; } return(result); }
public bool GetDiscourseDocumentFileStream(Tenant tenant, DiscoursePostVersionAttachment discoursePostVersionAttachment, out Stream stream, out Exception exception) { var result = false; stream = null; exception = null; try { var connectionString = tenant.StorageConnectionStringPrimary; var account = CloudStorageAccount.Parse(connectionString); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference("discourseexternaldocuments");// tenant.UrlResourceGroup); container.CreateIfNotExists(); container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Off, }); var blob = container.GetBlockBlobReference(discoursePostVersionAttachment.FileNameServer); stream = new MemoryStream(); blob.DownloadToStream(stream); result = true; } catch (Exception e) { if (stream != null) { try { stream.Dispose(); } finally { stream = null; } } exception = e; } return(result); }