用Unity上传blob到Azure

本文关键字:Azure blob 上传 Unity | 更新日期: 2023-09-27 18:13:18

我正在尝试将数据上传到Azure门户上的blob服务。

我一直在尝试使用这个页面: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()); 
}

blob设置为blob,即读、写权限。我尝试了各种各样的变化,比如添加/删除文件扩展名,也添加了SaS密钥,但它从未更新服务器内容,尽管Put请求声称是成功的。Get请求可以正常工作,但是打印的是旧版本的数据,而不是更新后的数据。

有谁知道如何在Unity中使用Put请求

用Unity上传blob到Azure

不知道为什么会发生这种情况,但是你可以使用这个插件与Azure服务进行通信。这会解决你的问题。

编辑:

阅读你发布的MS链接后,问题是你缺少几个标题:

    授权
  • 日期或x-ms-日期
  • x-ms-version
  • 内容长度
  • x-ms-blob-type

请理解blob的类型。您没有提到您正在进行的blob请求的类型。请再次查看该链接,以查看每个blob需要哪些额外的头文件。如果它在描述中说"必需",那么你必须把它包含在请求中。如果上面写着"Optional",你就不需要了。

如何在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头,因为Unity会自动为你生成它们。无论如何,您不允许使用UnityWebRequest手动设置它们。查看这里的授权头内容。