使用 Java SDK 将文件上传到 Azure blob

问题描述 投票:0回答:1

我正在尝试使用 Azure Java SDK 在 Java 中实现一段代码,该代码允许我将文件(在我的例子中为 jpg)上传到 Azure 容器。我已经写了这个,但失败了:

String ENDPOINT= "https://myaccount.blob.core.windows.net";

BlobContainerClient blobContainerClient = new BlobContainerClientBuilder().
    endpoint(ENDPOINT).
    credential(CREDENTIAL).
    containerName(CONTAINER_NAME).
    buildClient();

// Get a reference to a local image
BlobClient blobClient = blobContainerClient.getBlobClient(myJpgLocalPath + myJpgFile);

// Set headers
blobClient.setHttpHeaders(new BlobHttpHeaders().setContentType("image/jpeg"));

// Upload the blob
blobClient.uploadFromFile(myJpgLocalPath + myJpgFile, false);

我所做的另一种方法是:

BlobServiceClient storageClient = new BlobServiceClientBuilder().
    endpoint(ENDPOINT).
    credential(CREDENTIAL).
    buildClient();

BlobContainerClient blobContainerClient = storageClient.getBlobContainerClient(CONTAINER_NAME); 

// Get a reference to a local image
BlobClient blobClient = blobContainerClient.getBlobClient(myJpgLocalPath + myJpgFile);
    
// Set headers
blobClient.setHttpHeaders(new BlobHttpHeaders().setContentType("image/jpeg"));
    
// Upload the blob
blobClient.uploadFromFile(myJpgLocalPath + myJpgFile, false);

这两个根本不起作用,甚至构建客户端也失败。

显示的错误是这两个:

java.lang.ClassNotFoundException: com.fasterxml.jackson.dataformat.xml.PackageVersion
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1412)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1220)
        at com.azure.core.implementation.jackson.JacksonVersion.<init>(JacksonVersion.java:46)
        at com.azure.core.implementation.jackson.JacksonVersion.getInstance(JacksonVersion.java:72)
        at com.azure.core.implementation.jackson.ObjectMapperShim.<clinit>(ObjectMapperShim.java:40)
        at com.azure.core.util.serializer.JacksonAdapter.<init>(JacksonAdapter.java:81)
        at com.azure.core.util.serializer.JacksonAdapter.<init>(JacksonAdapter.java:59)
        at com.azure.core.util.serializer.JacksonAdapter$SerializerAdapterHolder.<clinit>(JacksonAdapter.java:114)
        at com.azure.core.util.serializer.JacksonAdapter.createDefaultSerializerAdapter(JacksonAdapter.java:123)
        at com.azure.storage.blob.implementation.util.ModelHelper.<clinit>(ModelHelper.java:62)
        at com.azure.storage.blob.BlobUrlParts.parse(BlobUrlParts.java:371)
        at com.azure.storage.blob.BlobContainerClientBuilder.endpoint(BlobContainerClientBuilder.java:181)
...

java.lang.NoClassDefFoundError: Could not initialize class com.azure.storage.blob.implementation.util.ModelHelper
        at com.azure.storage.blob.BlobUrlParts.parse(BlobUrlParts.java:371)
        at com.azure.storage.blob.BlobContainerClientBuilder.endpoint(BlobContainerClientBuilder.java:181)
...

我做错了什么?

谢谢!

azure azure-blob-storage azure-sdk-for-java
1个回答
0
投票

Azure 存储 Blob SDK 正在尝试确定 Jackson Dataformat XML 的版本,但无法在 jackson-dataformat-xml 中找到 PackageVersion 类。这表明存在一些可能的问题,Jackson Dataformat XML 不是应用程序的一部分,或者 Azure 存储 Blob SDK 无法访问 PackageVersion。

除此之外,您为上传 blob 编写的代码应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.