Java Azure Blob存储获取403错误服务器无法验证请求
我目前正在进行SAS URL的突发活动,以从Azure上载、下载和删除Blob,但一些URL返回403错误 “服务器无法验证请求。请确保 授权标头的格式正确,包括签名。“ 我已经创建了正确的SAS并执行了URL,但仍然不确定如何修复它,因为我生成了类似这样的URL 以下是生成SAS URL以供上传和执行的示例代码:Java Azure Blob存储获取403错误服务器无法验证请求,java,azure,azure-storage-blobs,Java,Azure,Azure Storage Blobs,我目前正在进行SAS URL的突发活动,以从Azure上载、下载和删除Blob,但一些URL返回403错误 “服务器无法验证请求。请确保 授权标头的格式正确,包括签名。“ 我已经创建了正确的SAS并执行了URL,但仍然不确定如何修复它,因为我生成了类似这样的URL 以下是生成SAS URL以供上传和执行的示例代码: public static URL generateUploadSignedURL(String filename, String userId) throws URISyntax
public static URL generateUploadSignedURL(String filename, String userId) throws URISyntaxException, StorageException, InvalidKeyException, MalformedURLException {
CloudBlobContainer container = cloudBlobAdmin.getContainerReference(bucketData);
CloudBlockBlob blob = container.getBlockBlobReference(filename);
SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy();
Instant instant = Instant.now();
sasPolicy.setSharedAccessStartTime(Date.from(instant));
sasPolicy.setSharedAccessExpiryTime(Date.from(instant.plus(1, ChronoUnit.HOURS))); // Use the start time delta one hour as the end time for the shared
sasPolicy.setPermissions(EnumSet.of(
SharedAccessBlobPermissions.WRITE)
);
String token = blob.generateSharedAccessSignature(sasPolicy, null);
String url = blob.getUri()+"?"+token;
System.out.println(blob.getUri()+"?"+token);
return new URL(url);
}
public static int uploadFileWithUrl(InputStream inputStream, URL url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
if (url.toString().contains("blob.core.windows.net")) { // for azure urls add request property
connection.setRequestProperty("x-ms-blob-type", "BlockBlob");
}
connection.setRequestProperty("User-Agent", "Multi-Cloud-Management-SignedURL");
File tempFile = new File("src/main/resources/input.tmp");
FileUtils.copyInputStreamToFile(inputStream, tempFile);
DataOutputStream out = new DataOutputStream (connection.getOutputStream());
out.write(Files.readAllBytes(Paths.get(tempFile.toURI())));
out.close();
connection.getResponseCode();
//System.out.println("HTTP response code: " + connection.getResponseCode());
connection.disconnect();
tempFile.delete();
return connection.getResponseCode();
}
您的SAS具有读取权限(
sp=r
)。@GauravMantri AIS是使用示例代码作为参考生成的SAS URL的唯一示例。您可以读取响应消息(我认为您需要使用getResponseMessage()
)并共享该消息吗?您应该会看到有关403错误的更多详细信息。您是否可以将详细错误分享为@Stopped suggestive?@AllenWu不幸得到的错误消息只是“服务器无法验证请求。请确保正确形成授权标头的值,包括签名。”正如我在帖子中所写,您的SAS拥有读取权限(sp=r
)。@GauravMantri AIS是使用示例代码作为参考生成的SAS URL的唯一示例。您可以读取响应消息(我想您需要使用getResponseMessage()
)并共享该消息吗?您应该会看到有关403错误的更多详细信息。您可以将详细错误分享为@Stopped suggestive?@AllenWu吗?很遗憾,我收到的错误消息只是“服务器无法验证请求。请确保包含签名的授权标头的值格式正确。”正如我在帖子中所写