Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在REST请求中设置元数据以将blob放入AZURE_Azure_Azure Storage_Azure Storage Blobs - Fatal编程技术网

在REST请求中设置元数据以将blob放入AZURE

在REST请求中设置元数据以将blob放入AZURE,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我能够使用azure提供的RESTAPI将文件上载到azure blob 我想在我请求put blob时设置元数据,当我将其设置到标题中时,如图所示,我无法上传文件并获得以下异常org.apache.http.client.ClientProtocolException 从下面代码的最后一行开始 HttpPut req = new HttpPut(uri); req.setHeader("x-ms-blob-type", blobType); req.setHeader(

我能够使用azure提供的RESTAPI将文件上载到azure blob

我想在我请求put blob时设置元数据,当我将其设置到标题中时,如图所示,我无法上传文件并获得以下异常
org.apache.http.client.ClientProtocolException

从下面代码的最后一行开始

    HttpPut req = new HttpPut(uri);
    req.setHeader("x-ms-blob-type", blobType);
    req.setHeader("x-ms-date", date);
    req.setHeader("x-ms-version", storageServiceVersion);
    req.setHeader("x-ms-meta-Cat", user);
    req.setHeader("Authorization", authorizationHeader);

    HttpEntity entity = new InputStreamEntity(is,blobLength);
    req.setEntity(entity);

    HttpResponse response = httpClient.execute(req);
关于这一点,我有两个问题

  • 是否可以设置不同的元数据,避免覆盖文件

  • 若第一个问题是“是”,那个么如何在REST请求中设置元数据以将blob放入Azure


  • 请帮忙

    这里有几件事要做

    关于您得到的错误,这是因为您在计算授权头时没有添加元数据头。请阅读此处的
    构造规范化标题字符串
    部分:

    基于此,您需要更改以下代码行(来自您的博客文章)

    (注意:我刚刚在记事本中做了这些更改,因此它们可能不起作用。请转到我上面提到的链接,以正确创建规范化标题字符串

    是否可以设置不同的元数据,避免覆盖文件


    不确定这是什么意思。您可以通过在博客上执行操作来更新blob的元数据。

    您可以共享生成授权标头的代码吗?您可能需要确保的一点是,您的自动化标头计算中也包含自定义metedata标头。此外,您可能需要在Fi中跟踪请求/响应ddler查看存储服务返回的确切错误消息。这与我所做的相同,只是一次更改,使用inputstream而不是FileStream。如果粘贴整个代码,这会有所帮助。还可以尝试通过Fiddler跟踪您的请求,以便您知道存储服务发送的确切错误。
    String canonicalizedHeaders = "x-ms-blob-type:"+blobType+"\nx-ms-date:"+date+"\nx-ms-version:"+storageServiceVersion;
    
    String canonicalizedHeaders = "x-ms-blob-type:"+blobType+"\nx-ms-date:"+date+"\nx-ms-meta-cat"+user+"\nx-ms-version:"+storageServiceVersion;