用于 blob 的 Azure Java SDK - 已发出加载默认 HttpClient 提供程序的请求,但在类路径中找不到
Azure Java SDK for blob - A request was made to load the default HttpClient provider but one could not be found on the classpath
以下 https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-java?tabs=powershell 收到此错误:
Caused by: java.lang.IllegalStateException: A request was made to load the default HttpClient provider but one could not be found on the classpath. If you are using a dependency manager, consider including a dependency on azure-core-http-netty or azure-core-http-okhttp. Depending on your existing dependencies, you have the choice of Netty or OkHttp implementations. Additionally, refer to https://aka.ms/azsdk/java/docs/custom-httpclient to learn about writing your own implementation.
at com.azure.core.implementation.http.HttpClientProviders.createInstance(HttpClientProviders.java:37)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:27)
at com.azure.core.http.HttpPipelineBuilder.build(HttpPipelineBuilder.java:60)
at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:110)
at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:107)
at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:84)
找不到HttpClient时会出现error。它似乎与代码无关。尝试检查您是否按照文档中的步骤操作。
我在 App.java 中尝试了以下代码,它运行良好。
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().endpoint(endpoint).credential(credential).buildClient();
如果删除credential()
,会return这个错误:ResourceNotFound The specified resource does not exist.
无需凭据即可访问 public blob:
有效:
拿https://github.com/Azure-Samples/azure-sdk-for-java-storage-blob-upload-download
将 pom 中的 azure 版本更改为 12.9
导出 AZURE_STORAGE_ACCOUNT=azuremlexamples
编辑如下
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Writer;
import com.azure.storage.blob.BlobClient;
import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.common.StorageSharedKeyCredential;
public class Quickstart {
static File createTempFile() throws IOException {
// Here we are creating a temporary file to use for download and upload to Blob
// storage
File sampleFile = null;
sampleFile = File.createTempFile("sampleFile", ".txt");
System.out.println(">> Creating a sample file at: " + sampleFile.toString());
Writer output = new BufferedWriter(new FileWriter(sampleFile));
output.write("Hello Azure Storage blob quickstart.");
output.close();
return sampleFile;
}
public static void main(String[] args) throws IOException {
// Creating a sample file to use in the sample
File sampleFile = null;
sampleFile = createTempFile();
String downloadedFilePath = "downloadedFile.txt";
// Retrieve the credentials and initialize SharedKeyCredentials
String accountName = System.getenv("AZURE_STORAGE_ACCOUNT");
String accountKey = System.getenv("AZURE_STORAGE_ACCESS_KEY");
String endpoint = "https://" + accountName + ".blob.core.windows.net";
String containerName = "datasets";
String blobName = "iris.csv";
// Create a SharedKeyCredential
//StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
// Create a blobServiceClient
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint(endpoint)
.buildClient();
// Create a containerClient
BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient(containerName);
// Create a container
// blobServiceClient.createBlobContainer(containerName);
// System.out.printf("Creating a container : %s %n", blobContainerClient.getBlobContainerUrl());
// Create a BlobClient to run operations on Blobs
// BlobClient blobClient = blobContainerClient.getBlobClient(blobName);
System.out.println("Listing blobs in the container: " + blobContainerClient.getBlobContainerUrl());
blobContainerClient.listBlobs()
.forEach(
blobItem -> System.out.println("This is the blob name: " + blobItem.getName()));
}
}
运行 mvn compile exec:java
输出为:
列出容器中的 blob:https://azuremlexamples.blob.core.windows.net/datasets
这是 blob 名称:criteo-uplift-v2.1.csv.gz
这是 blob 名称:iris.csv
以下 https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-java?tabs=powershell 收到此错误:
Caused by: java.lang.IllegalStateException: A request was made to load the default HttpClient provider but one could not be found on the classpath. If you are using a dependency manager, consider including a dependency on azure-core-http-netty or azure-core-http-okhttp. Depending on your existing dependencies, you have the choice of Netty or OkHttp implementations. Additionally, refer to https://aka.ms/azsdk/java/docs/custom-httpclient to learn about writing your own implementation.
at com.azure.core.implementation.http.HttpClientProviders.createInstance(HttpClientProviders.java:37)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:27)
at com.azure.core.http.HttpPipelineBuilder.build(HttpPipelineBuilder.java:60)
at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:110)
at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:107)
at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:84)
找不到HttpClient时会出现error。它似乎与代码无关。尝试检查您是否按照文档中的步骤操作。
我在 App.java 中尝试了以下代码,它运行良好。
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().endpoint(endpoint).credential(credential).buildClient();
如果删除credential()
,会return这个错误:ResourceNotFound The specified resource does not exist.
无需凭据即可访问 public blob:
有效:
拿https://github.com/Azure-Samples/azure-sdk-for-java-storage-blob-upload-download
将 pom 中的 azure 版本更改为 12.9
导出 AZURE_STORAGE_ACCOUNT=azuremlexamples
编辑如下
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Writer;
import com.azure.storage.blob.BlobClient;
import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.common.StorageSharedKeyCredential;
public class Quickstart {
static File createTempFile() throws IOException {
// Here we are creating a temporary file to use for download and upload to Blob
// storage
File sampleFile = null;
sampleFile = File.createTempFile("sampleFile", ".txt");
System.out.println(">> Creating a sample file at: " + sampleFile.toString());
Writer output = new BufferedWriter(new FileWriter(sampleFile));
output.write("Hello Azure Storage blob quickstart.");
output.close();
return sampleFile;
}
public static void main(String[] args) throws IOException {
// Creating a sample file to use in the sample
File sampleFile = null;
sampleFile = createTempFile();
String downloadedFilePath = "downloadedFile.txt";
// Retrieve the credentials and initialize SharedKeyCredentials
String accountName = System.getenv("AZURE_STORAGE_ACCOUNT");
String accountKey = System.getenv("AZURE_STORAGE_ACCESS_KEY");
String endpoint = "https://" + accountName + ".blob.core.windows.net";
String containerName = "datasets";
String blobName = "iris.csv";
// Create a SharedKeyCredential
//StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
// Create a blobServiceClient
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint(endpoint)
.buildClient();
// Create a containerClient
BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient(containerName);
// Create a container
// blobServiceClient.createBlobContainer(containerName);
// System.out.printf("Creating a container : %s %n", blobContainerClient.getBlobContainerUrl());
// Create a BlobClient to run operations on Blobs
// BlobClient blobClient = blobContainerClient.getBlobClient(blobName);
System.out.println("Listing blobs in the container: " + blobContainerClient.getBlobContainerUrl());
blobContainerClient.listBlobs()
.forEach(
blobItem -> System.out.println("This is the blob name: " + blobItem.getName()));
}
}
运行 mvn compile exec:java
输出为:
列出容器中的 blob:https://azuremlexamples.blob.core.windows.net/datasets 这是 blob 名称:criteo-uplift-v2.1.csv.gz 这是 blob 名称:iris.csv