MVC Web应用程序的用户是否有办法避免必须通过MVC应用程序上传文件,并最终让应用程序将其传输到存储?
换句话说,是否可以为Web客户端提供适当的SAS令牌,将其直接上传到Azure Blob存储中的正确位置?
我见过客户端应用程序直接复制到blob存储的示例,但在Web应用程序上找不到任何内容。谢谢!
答案 0 :(得分:2)
目前这是不可能的,因为Windows Azure存储没有CORS支持。然而,在\ Build会议期间,存储团队表示它即将到来。实现此目的的一种方法是仅在@viperguyz的链接中提及在该存储帐户中托管HTML页面,并使用SAS在该存储帐户中上载blob。如果需要,可以将自定义域映射到blob存储帐户并使用该域名。自定义域名的问题是您将无法使用SSL。
答案 1 :(得分:0)
您可以从客户端上传而无需使用JavaScript触及MVC网站,我已经写了一篇博文,其中有一个如何执行此操作的示例 http://blog.dynabyte.se/2013/10/09/uploading-directly-to-windows-azure-blob-storage-from-javascript/ code is at GitHub
它基于Gaurav Mantris example,并通过在Blob存储本身上托管JavaScript来工作。
答案 2 :(得分:-1)
当然 - 这是一个例子:
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
private string UploadFileToBlob(string file)
{
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the blob client
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container
CloudBlobContainer container = blobClient.GetContainerReference("mydeployments");
// Retrieve reference to a blob named "myblob"
var date = DateTime.UtcNow.ToString("yyyyMMdd-hhmmss-");
var fileinfo = new FileInfo(file);
if (fileinfo.Exists)
{
var fileToUpload = new FileInfo(file).Name;
var filename = date + fileToUpload;
try
{
CloudBlob blob = container.GetBlobReference(filename);
// Create or overwrite the "myblob" blob with contents from a local file
using (var fileStream = System.IO.File.OpenRead(file))
{
blob.UploadFromStream(fileStream);
}
return blob.Uri.AbsoluteUri;
}
catch (Exception ex)
{
LogError("Error uploading file to blog: ", ex.Message);
return "";
}
}
LogError("Error - specified file does not exist: ", file);
return "";
}