适用于多租户应用程序的Azure存储.我们正在开发Azure上的多租户应用程序,每个租户需要大约10,000个租户和大约100 GB到1 TB的数据存储.该应用程序将分别维护文档和二进制内容以及每个租户的元数据.我们正在考虑使用Azure Block Blob存储来存储数据.因为,要求是为每个租户分开数据,我们遇到了以下方法.
我们对我们的方法有以下疑问:
我正在尝试使用.NET 4.5异步和等待实现完全异步的 blob下载.
让我们假设整个blob可以立即适应内存,我们想把它保存在一个string.
码:
public async Task<string> DownloadTextAsync(ICloudBlob blob)
{
using (Stream memoryStream = new MemoryStream())
{
IAsyncResult asyncResult = blob.BeginDownloadToStream(memoryStream, null, null);
await Task.Factory.FromAsync(asyncResult, (r) => { blob.EndDownloadToStream(r); });
memoryStream.Position = 0;
using (StreamReader streamReader = new StreamReader(memoryStream))
{
// is this good enough?
return streamReader.ReadToEnd();
// or do we need this?
return await streamReader.ReadToEndAsync();
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccountConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("container1");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blob1.txt"); …Run Code Online (Sandbox Code Playgroud) 使用Express with Node,我可以成功上传文件并将其传递到以下代码块中的Azure存储.
app.get('/upload', function (req, res) {
res.send(
'<form action="/upload" method="post" enctype="multipart/form-data">' +
'<input type="file" name="snapshot" />' +
'<input type="submit" value="Upload" />' +
'</form>'
);
});
app.post('/upload', function (req, res) {
var path = req.files.snapshot.path;
var bs= azure.createBlobService();
bs.createBlockBlobFromFile('c', 'test.png', path, function (error) { });
res.send("OK");
});
Run Code Online (Sandbox Code Playgroud)
这很好用,但Express会创建一个临时文件并先存储图像,然后我从文件中将其上传到Azure.这似乎是一个低效且不必要的步骤,我最终必须管理临时文件目录的清理.
我应该能够使用blobService.createBlockBlobFromStreamAzure SDK中的方法将文件直接流式传输到Azure存储,但我不熟悉Node或Express以了解如何访问流数据.
app.post('/upload', function (req, res) {
var stream = /// WHAT GOES HERE ?? ///
var bs= azure.createBlobService();
bs.createBlockBlobFromStream('c', 'test.png', stream, function (error) { });
res.send("OK");
});
Run Code Online (Sandbox Code Playgroud)
我发现以下博客表明可能有办法这样做,当然Express也会抓取流数据并解析并将其保存到文件系统中. …
我将Azure blob url存储到我的数据库中.可以使用该URL获取blob吗?实际上我需要更新blob,在这样做时我需要验证.所以我需要将该数据库实体模型转换为我的本地模型并对它们应用验证.但在我的本地模型中我有Id,Name,HttpPostedFileBase文件.当我插入blob时,我得到blob url并保存它在database.But如何在更新时检索该blob?这是我的本地模特
public class BlobAppModel
{
public int Id { get; set; }
[Required(ErrorMessage="Please enter the name of the image")]
[Remote("IsNameAvailable","Home",HttpMethod="POST",ErrorMessage="Name Already Exists")]
public string Name { set; get; }
[Required(ErrorMessage="Please select an image file")]
public HttpPostedFileBase File { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
我的实体模型就是这个
public partial class BlobApp
{
public int Id { get; set; }
public string Name { get; set; }
public string Uri { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我编辑它时,我需要得到blob ..我被困在这里..任何人都可以帮助我吗?
public ActionResult Edit(string Id)
{ …Run Code Online (Sandbox Code Playgroud) 我看到有不同种类的URL来访问blob存储,如下所示:
wasb://XXXXXXXXXX@XXXXX.blob.core.windows.net
https://XXXXXXXXXX@XXXXX.blob.core.windows.net
Run Code Online (Sandbox Code Playgroud)
有什么不同?可能是差异的原因是什么?
我有一个使用WindowsAzure.Storage API v3的WebForms应用程序.它在开发和一个生产环境中工作正常,但我推出了一个新实例,任何调用Azure Blob存储的代码都会给我403错误.
我已经习惯了这一段时间了,并且它对Blob存储的任何调用失败了,所以不是显示我的代码,而是显示我的堆栈跟踪:
[WebException: The remote server returned an error: (403) Forbidden.]
System.Net.HttpWebRequest.GetResponse() +8525404
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) +1541
[StorageException: The remote server returned an error: (403) Forbidden.]
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) +2996
Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessType accessType, BlobRequestOptions requestOptions, OperationContext operationContext) +177
ObsidianData.Azure.Storage.GetContainer(CloudBlobClient client, Containers targetContainer) in D:\Dev\nSource\Obsidian\Source\ObsidianData\Azure\Storage.vb:84
ObsidianWeb.Leads.HandleListenLink(String fileName, HyperLink link) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:188
ObsidianWeb.Leads.LoadEntity_ContactDetails(BoLead lead) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:147
ObsidianWeb.Leads.LoadEntity(BoLead Lead) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:62
EntityPages.EntityPage`1.LoadEntity() +91
EntityPages.EntityPage`1.Page_LoadComplete(Object sender, EventArgs e) +151
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4018
Run Code Online (Sandbox Code Playgroud)
这是我试过的......
有人能告诉我托管磁盘和非托管磁盘之间的主要优点和区别,托管和非托管磁盘的各种优缺点以及如何才能最好地使用它?
有人能告诉我是否可以直接从Azure blob存储中读取csv文件作为流并使用Python处理它?我知道它可以使用C#.Net(如下所示)完成,但想知道Python中的等效库来执行此操作.
CloudBlobClient client = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("outfiles");
CloudBlob blob = container.GetBlobReference("Test.csv");*
Run Code Online (Sandbox Code Playgroud) 我想从azure存储中读取一个PDF文件字节,因为我有一个文件路径.
https://hostedPath/pdf/1001_12_Jun_2012_18_39_05_594.pdf
Run Code Online (Sandbox Code Playgroud)
那么可以通过直接传递其路径名来从blob存储中读取内容吗?我也在使用c#.
我试图运行一个从CMS端点获取JSON文件的脚本,将其传递给管道以转换为-json.但是,我收到一个错误,说无效的JSON原语.
ConvertFrom-Json:无效的JSON原语:.在D:\ AzureProject\SetupusingParameterfile.ps1:13 char:75
Run Code Online (Sandbox Code Playgroud)$JsonContent = Get-Content $TemplateParameterFileLocal -Raw | Conver ...CategoryInfo:NotSpecified:(:) [ConvertFrom-Json],ArgumentException + FullyQualifiedErrorId:System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
我的JSON参数文件的结构与Azure参数文件结构的内联方式一致,示例如下: -
{
"$schema": "http://schema.management.azure.com/schemas/20111-01-01/deploymentParameters.json#",
"contentVersion":"1.0.0.0",
"parameters":
{
"hostingPlanName": {"value": "pilotHosting"},
"hostingEnvironment": {"value": "pilotHostingenv"},
"serverFarmResourceGroup": {"value": "Pilot1H"},
"sqlserverName": {"value": "pilotsrvrtrialrun11"},
"administratorLogin": {"value": "sites1H"},
"administratorLoginPassword": {"value": "abcdefg"},
"serverName": {"value": "Pilotwebserver"},
"databaseUsername": {"value": "pilot1Hattabc"},
"databasePassword": {"value": "pilotdbabc1H"},
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这篇文章的目的是分享Azure项目PoC期间出现的一些事情,并希望以后能够为某人服务.
azure ×9
c# ×2
.net-4.5 ×1
asp.net ×1
asp.net-mvc ×1
async-await ×1
blob ×1
express ×1
json ×1
node.js ×1
powershell ×1
python ×1
vb.net ×1