2015-07-04 72 views
0

我正在關注官方Azure Blob上傳文檔,併成功實現了Blob上傳功能。然而,頁面在上傳後刷新,我需要在頁面不必刷新的情況下上傳圖片。基本上沒有回傳。Azure上傳Blob無頁面刷新

這是我到目前爲止有:

 if (profile_pic_input.HasFile) 
     { 
       var image = Request.Files["profile_pic_input"]; 

       CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 
       CloudBlobClient blobStorage = storageAccount.CreateCloudBlobClient(); 
       CloudBlobContainer container = blobStorage.GetContainerReference("photos"); 
       if (container.CreateIfNotExists()) 
       { 
        // configure container for public access 
        var permissions = container.GetPermissions(); 
        permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
        container.SetPermissions(permissions); 
       } 


       String tempName = GeneratePictureName(); 
       string uniqueBlobName = string.Format("photos/image_{0}{1}", tempName, Path.GetExtension(image.FileName)); 
       CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName); 



       blob.Properties.ContentType = image.ContentType; 
       blob.UploadFromStream(image.InputStream); 
     } 

回答

2

爲了避免回發,您需要使用AJAX。大多數常見的JavaScript框架如jQuery都支持。

現在即將到使用AJAX的文件上傳到Blob存儲,主要有兩種方法可以做到這一點:

  1. 直接上傳到Blob存儲從用戶的瀏覽器:如果用戶使用的現代化支持HTML5的瀏覽器,那麼他們可以直接將本地計算機上的文件上傳到BLOB存儲中。請參閱此鏈接瞭解更多詳情:https://msdn.microsoft.com/en-us/library/azure/hh824678.aspx。基本上你要做的是創建一個至少具有Write權限的Shared Access Signature,並允許來自Web應用程序的跨源請求(CORS)到您的存儲帳戶。這樣文件就直接傳送到您的存儲帳戶中。我還寫了一篇關於您可能會覺得有用的博客文章:http://gauravmantri.com/2013/12/01/windows-azure-storage-and-cors-lets-have-some-fun/

  2. 將文件從用戶的瀏覽器上傳到您的網絡服務器,然後將文件傳輸到BLOB存儲。如果你搜索AJAX和文件上傳,我相信你會發現很多資源,它會告訴你如何工作。

我的建議是使用選項#1,因爲它更快,並且不會使您的Web服務器超載。

+0

謝謝Gaurav。我實際登陸你的網站,幾分鐘前閱讀這篇文章,然後再發布。威伊信息。然而,這似乎有點複雜..沒關係,我會試一試。該代碼在哪裏查找需要上傳的文件上傳器的文件? – Dinuka

+0

請在我的博客文章中查看'reader.onloadend'功能。這就是上傳魔法發生的地方:)。 「Web應用程序」部分是您想要閱讀和理解的內容。 –

+0

由於它是一個控制檯應用程序,在我的情況下,我必須添加到上傳按鈕點擊隊友?可以請你用答案配對解釋它嗎?主要幫助,Gaurav – Dinuka