2012-10-08 19 views
0

我想從網絡瀏覽器將文本/ html字符串作爲Azure blob直接上載到Azure存儲(無需先通過Azure VM /網絡服務器)使用瀏覽器端JavaScript。從我的研究中,我明白可以使用Azure REST API +共享訪問簽名從Silverlight客戶端或通過MVC 3視圖實現此目的。 (這裏是使用SilverLight/MVC3進行控制的鏈接:http://code.msdn.microsoft.com/silverlight/Silverlight-Azure-Blob-3b773e26#content)。我還發現了一個使用服務器端javascript與Node.JS https://github.com/jpgarcia/waz-storage-js上傳的庫。如何使用javascript從瀏覽器直接將文本字符串上傳到Windows Azure Blob

我的問題是,如何將文本字符串上傳到Azure blob只使用瀏覽器端JavaScript和HTML和SAS(不使用Silverlight或MVC),並直接向Azure沒有通過Web服務器?如何將字符串值傳遞給Azure休息API調用(它會接受JSON字符串?)?我查看了MSDN REST api示例,但是我不清楚如何傳遞要上傳的文本字符串。有人能幫忙嗎?提前致謝。

回答

1

我不認爲這可以做到。除非網頁從同一個Blob存儲域託管,否則這將是一個跨域調用,這是不允許的(除非設置了CORS頭,它們不適用於blob存儲)。

另外,上傳到blob需要HTTP PUT請求,我相信大多數瀏覽器只允許POST和GET。

UPDATE

見下面的意見,但它看起來像有些瀏覽器允許PUT請求。如前所述,通過從同一個Blob存儲帳戶提供原始頁面,可以擊敗同源策略。在這種情況下,代碼會是這個樣子(使用jQuery):

$.ajax({ 
    url: url, 
    type: 'PUT', 
    data: 'Hello, World!', 
    headers: {'Content-Type': 'text/html'} 
}).success(function() { 
    console.log('Saved successfully.'); 
}); 
+0

感謝您的快速響應,Steve。在你提到的兩個問題中,#1跨域可以在我的情況下被克服,因爲我們可以將網頁放在同一個blob存儲域中,所以剩下的api調用會更新同一個域中的同一個blob。對於#2,我認爲更多的是對Azure REST API的AJAX調用,在這種情況下,我認爲應該支持PUT(對於AJAX)。鑑於這兩種可能的解決方法,問題能夠解決嗎?該字符串是否可以作爲JSON參數傳遞給Azure REST API? – Jarnal

+0

經過四處搜索,看起來你可能是正確的,允許PUT請求。至於正文,blob PUT請求只是在正文中有原始數據,所以不要JSON編碼(或表單編碼)。只需將文本直接放在主體中即可。 – smarx

+0

jQuery的'$ .ajax'文檔提到,你可以嘗試使用PUT,但不支持所有的瀏覽器。請參閱http://api.jquery.com/jQuery.ajax/。 – smarx

相關問題