【发布时间】:2023-03-08 15:33:02
【问题描述】:
我想使用为 blob 生成的 SAS URL 将文件上传到 Azure Blob,但执行 URL 时失败。我收到带有消息的 HTTP 错误 400
未指定此请求所必需的 HTTP 标头。
这是我的代码:
BlobServiceClient blobServiceClient = initBlobStorageClient();
BlobContainerClient testprovenanceContainer = getContainerClient(blobServiceClient, "testcontainer");
BlobClient blobClient = testprovenanceContainer.getBlobClient("hello.png");
OffsetDateTime expiryTime = OffsetDateTime.now().plusMinutes(5);
BlobContainerSasPermission permission = new BlobContainerSasPermission().setAddPermission(true).setWritePermission(true);
BlobServiceSasSignatureValues values = new BlobServiceSasSignatureValues(expiryTime, permission)
.setStartTime(OffsetDateTime.now());
String s = "https://testazure.blob.core.windows.net/testcontainer/hello.png?"+blobClient.generateSas(values);
uploadFileWithUrl(new File("hello.png"), new URL(a));
public static void uploadFileWithUrl(File file, URL url) throws IOException {
String contentType = Files.probeContentType(file.toPath());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-type", contentType);
connection.setRequestProperty("User-Agent", "Multi-Cloud Management 006b8507-b815-47b9-bce0-08b91981f17a");
DataOutputStream out = new DataOutputStream (connection.getOutputStream());
out.write(Files.readAllBytes(Paths.get(file.toURI())));
out.close();
// Check the HTTP response code. To complete the upload and make the object available,
// you must interact with the connection object in some way.
connection.getResponseCode();
System.out.println("HTTP response code: " + connection.getResponseCode());
connection.disconnect();
}
【问题讨论】: