在REST请求中设置元数据以将blob放入AZURE
我能够使用azure提供的RESTAPI将文件上载到azure blob 我想在我请求put blob时设置元数据,当我将其设置到标题中时,如图所示,我无法上传文件并获得以下异常在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(
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);
关于这一点,我有两个问题
请帮忙这里有几件事要做 关于您得到的错误,这是因为您在计算授权头时没有添加元数据头。请阅读此处的
构造规范化标题字符串部分:
基于此,您需要更改以下代码行(来自您的博客文章)
到
(注意:我刚刚在记事本中做了这些更改,因此它们可能不起作用。请转到我上面提到的链接,以正确创建规范化标题字符串
是否可以设置不同的元数据,避免覆盖文件
不确定这是什么意思。您可以通过在博客上执行操作来更新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;