首页 文章

使用Unity将blob上载到Azure

提问于
浏览
0

我正在尝试将数据上传到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请求的方法

1 回答

  • 0

    无法分辨为什么会发生这种情况,但您可以使用this插件与Azure服务进行通信 . 它会解决你的问题 .

    EDIT

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

    • 授权

    • 日期或x-ms-date

    • x-ms-version

    • 内容长度

    • x-ms-blob-type

    请了解有blob的类型 . 您没有提到您正在制作的blob请求的类型 . 请再次查看link以查看每个blob需要哪些额外标头 . 如果在说明中说明了"Required",则必须将其包含在请求中 . 如果它说"Optional",你不需要它 .

    如何在 UnityWebRequest 中添加 Headers ?

    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 Headers ,因为Unity会自动为您生成它们 . 不允许您使用 UnityWebRequest 手动设置它们 . 查看here以获取授权标头的内容 .

相关问题