Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
Java Azure Blob存储获取403错误服务器无法验证请求_Java_Azure_Azure Storage Blobs - Fatal编程技术网

Java Azure Blob存储获取403错误服务器无法验证请求

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

我目前正在进行SAS URL的突发活动,以从Azure上载、下载和删除Blob,但一些URL返回403错误

“服务器无法验证请求。请确保 授权标头的格式正确,包括签名。“

我已经创建了正确的SAS并执行了URL,但仍然不确定如何修复它,因为我生成了类似这样的URL

以下是生成SAS URL以供上传和执行的示例代码:

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吗?很遗憾,我收到的错误消息只是“服务器无法验证请求。请确保包含签名的授权标头的值格式正确。”正如我在帖子中所写