You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Quarkus应用连接至Azure文件共享并实现文件上传?

Quarkus 连接 Azure 文件共享并实现文件上传

核心方案

Quarkus 暂未提供官方适配 Azure 文件共享的专用扩展,但可以直接基于 Azure Storage Files Java SDK 实现,底层逻辑和你找到的 SpringBoot 方案一致,只需适配 Quarkus 的依赖注入与应用启动机制。

分步实现

1. 添加依赖

在 pom.xml 中引入 Azure Storage Files SDK 依赖:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-storage-file-share</artifactId>
    <version>12.21.0</version> <!-- 建议使用最新稳定版 -->
</dependency>

2. 配置连接信息

在 application.properties 中添加 Azure 文件共享的配置项:

azure.storage.fileshare.connection-string=你的Azure存储连接字符串
azure.storage.fileshare.share-name=目标文件共享名称

3. 初始化文件共享客户端

创建配置类,通过依赖注入初始化 ShareClient 并作为 Quarkus Bean 管理:

import com.azure.storage.file.share.ShareClient;
import com.azure.storage.file.share.ShareClientBuilder;
import io.quarkus.arc.DefaultBean;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.eclipse.microprofile.config.inject.ConfigProperty;

@ApplicationScoped
public class AzureFileShareConfig {

    @Inject
    @ConfigProperty(name = "azure.storage.fileshare.connection-string")
    String connectionString;

    @Inject
    @ConfigProperty(name = "azure.storage.fileshare.share-name")
    String shareName;

    @DefaultBean
    public ShareClient shareClient() {
        return new ShareClientBuilder()
                .connectionString(connectionString)
                .shareName(shareName)
                .buildClient();
    }
}

4. 封装文件上传服务

创建服务类,封装文件上传的核心逻辑:

import com.azure.storage.file.share.ShareClient;
import com.azure.storage.file.share.ShareFileClient;
import jakarta.inject.Inject;
import jakarta.enterprise.context.ApplicationScoped;
import java.io.InputStream;

@ApplicationScoped
public class AzureFileShareService {

    @Inject
    ShareClient shareClient;

    public void uploadFile(String directoryName, String fileName, InputStream fileStream, long fileSize) {
        // 确保目标目录存在
        shareClient.createDirectoryIfNotExists(directoryName);
        // 获取文件客户端实例
        ShareFileClient fileClient = shareClient.getFileClient(directoryName + "/" + fileName);
        // 执行文件上传
        fileClient.upload(fileStream, fileSize);
    }
}

5. 接口调用示例

在 REST 资源类中注入服务,暴露上传接口:

import jakarta.inject.Inject;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.HttpHeaders;
import jakarta.ws.rs.core.Response;
import java.io.InputStream;

@Path("/files")
public class FileUploadResource {

    @Inject
    AzureFileShareService fileShareService;

    @POST
    @Path("/upload")
    public Response uploadFile(@Context HttpHeaders headers, InputStream fileStream) {
        String fileName = headers.getHeaderString("X-File-Name");
        String targetDir = "user-uploads";
        long fileSize = headers.getLength();

        fileShareService.uploadFile(targetDir, fileName, fileStream, fileSize);
        return Response.ok("文件上传成功").build();
    }
}

注意事项

  • 确保 Azure 存储账户的连接字符串拥有 File Share Contributor 级别的权限
  • 处理大文件时,可改用分块上传 API fileClient.uploadWithResponse() 实现断点续传
  • 可结合 Quarkus 的异常处理机制,补充上传失败的回滚与错误反馈逻辑

内容的提问来源于stack exchange,提问作者Catalina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:35:35