2016-10-17 243 views
0

我試圖將數據上傳到Azure門戶上的Blob服務。使用Unity將blob上傳到Azure

我一直在嘗試使用此頁:https://msdn.microsoft.com/library/azure/dd179451.aspx

我的代碼如下:

IEnumerator SetItem() 
{ 
    DataJson data = new DataJson("Amy", "201289"); 
    string json = JsonUtility.ToJson(data); 
    UnityWebRequest newWWW = UnityWebRequest.Put(
     "https://compstorage.blob.core.windows.net/folderName/item", json); 
    yield return newWWW.Send(); 
    if (newWWW.isError == false) 
    { 
     Debug.Log("Form upload complete!"); 
    } 
    UnityWebRequest www = UnityWebRequest.Get("compstorage.blob.core.windows.net/folderName/item.json"); 
    yield return www.Send(); 
    string text = System.Text.Encoding.UTF8.GetString(www.downloadHandler.data); 
    DataJson newData = JsonUtility.FromJson<DataJson>(text); 
    Debug.Log(newData.ToString()); 
} 

團塊被設置爲斑點的意思讀,寫權限。我嘗試了所有類型的變化,例如添加/刪除文件擴展名,也添加了SaS密鑰,但儘管Put請求聲稱成功,但它從不更新服務器內容。獲取請求確實工作正常,但打印舊版本的數據,而不是更新的數據。

有誰知道使用PUT請求在Unity

+0

您是否從Azure存儲獲取任何錯誤消息? –

+0

沒有,它很好。我試圖從uploadHandler中讀取內容,但沒有任何內容。 – Everts

+0

這很奇怪!通常,Azure存儲會報告一些錯誤。有一件事:在這種情況下,將容器的ACL設置爲「Blob」將無濟於事。請參閱此線程獲取更多詳細信息:http://stackoverflow.com/questions/40017960/azure-blob-storage-returns-404-on-put/40018175#40018175。你提到你也嘗試過使用SAS。您的SAS是否具有「寫入」權限? –

回答

0

不知道爲什麼發生這種情況的方式,但你可以使用this插件與Azure的服務進行通信。它會解決你的問題。

編輯

讀取MS鏈接您發佈後,問題是,你缺少幾個頭:

  • 授權
  • 日期或X-MS-日期
  • x-ms版本
  • 內容長度
  • x-ms-blob-type

請理解,有blob的類型。你沒有提到你正在製作的blob請求的類型。請再次查看link以查看每個Blob需要額外的標頭。如果它在說明中顯示「必需」,那麼您必須將其包含在請求中。如果它顯示「可選」,則不需要它。

如何包含標頭UnityWebRequest

UnityWebRequest newWWW = UnityWebRequest.Put("https://compstorage.blob.core.windows.net/folderName/item", json); 
newWWW.SetRequestHeader("Authorization","your Authorization"); 
newWWW.SetRequestHeader("x-ms-version","v1"); 
newWWW.SetRequestHeader("x-ms-blob-type","BlockBlob"); 
newWWW.SetRequestHeader("x-ms-date","Your Datte"); 

不要擔心Content-LengthDate標題爲團結會自動生成它們。反正你不能用UnityWebRequest手動設置它們。請參閱here瞭解爲授權標頭添加的內容。

+0

上傳blob是一個'PUT'請求而不是'PATCH'請求。 –

+0

只是注意到了。固定! – Programmer

+0

我會更深入地瞭解一下,但乍看之下,它似乎是對UnityWebRequest類的重寫。大多數情況下,我需要一個PUT請求,但這似乎是GET/POST和表格。我會明白的。 – Everts