2016-10-17 155 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