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

Java上传文件至Azure失败:ParentNotFound报错及配置疑问

解决Azure文件存储上传404 ParentNotFound错误

错误核心原因

报错ParentNotFound的本质是:你指定的远程父目录(dirName或文件名中包含的子目录结构)在Azure目标文件共享中不存在,Azure文件存储不会自动创建多级父目录,必须提前创建或通过代码生成。

必要的Azure配置确认

  1. 确认文件共享已创建
    在Azure Storage Explorer中找到你的存储账户wisdfdsfsie,展开「文件共享」,确认存在名为mis-archivos的共享。如果没有,右键「文件共享」→「创建文件共享」,输入名称后确认。

  2. 目录结构的两种创建方式

  • 手动创建:进入mis-archivos共享,依次创建hybris→master→mabe→temp目录。
  • 代码自动创建:使用SDK提供的createIfNotExists()方法自动生成所有不存在的多级目录。

代码修正方案

原代码问题点

  • 未提前创建目标目录,直接使用ShareDirectoryClient,若目录不存在则后续文件创建失败。
  • 调用时将包含本地路径的temp/GR_IMPEXP_25-03-2025.csv当作远程文件名,导致Azure认为要创建带路径的文件,但该路径下的子目录未创建,触发报错。

修正后的上传方法

public static Boolean uploadFile(String connectStr, String shareName,
                                String remoteDirPath, String localFilePath, String remoteFileName)
{
    try
    {
        // 构建远程目录客户端
        ShareDirectoryClient dirClient = new ShareFileClientBuilder()
             .connectionString(connectStr)
             .shareName(shareName)
             .resourcePath(remoteDirPath)
             .buildDirectoryClient();

        // 自动创建所有缺失的多级父目录
        dirClient.createIfNotExists();

        // 获取远程文件客户端
        ShareFileClient fileClient = dirClient.getFileClient(remoteFileName);
        // 直接上传本地文件,无需提前调用create(uploadFromFile会自动创建文件)
        fileClient.uploadFromFile(localFilePath);
        
        return true;
    }
    catch (Exception e)
    {
        System.out.println("uploadFile exception: " + e.getMessage());
        return false;
    }
}

修正后的调用代码

String connectionString = "DefaultEndpointsProtocol=https;" +
                "AccountName=wisdfdsfsie;" +
                "AccountKey=Y9vsdfsdfsdfsdffsdfGdQZK8Lz4DAIwi9A==";

String shareName = "mis-archivos";
// 远程完整目录路径(包含temp子目录)
String remoteDirPath = "hybris/master/mabe/temp";
// 本地文件的完整路径
String localFilePath = "temp/GR_IMPEXP_25-03-2025.csv";
// 远程文件名(仅文件名,不含路径)
String remoteFileName = "GR_IMPEXP_25-03-2025.csv";

boolean result = uploadFile(connectionString, shareName, remoteDirPath, localFilePath, remoteFileName);

if (result) {
    System.out.println("Upload Correct.");
} else {
    System.out.println("Upload Failed....");
}

关键注意事项

  • 严格区分本地文件路径和远程文件路径/名称:不要将本地路径直接作为远程文件名传递,避免路径分隔符导致的父目录不存在问题。
  • createIfNotExists()方法会递归创建所有缺失的父目录,无需手动逐层级创建。
  • 确保连接字符串中的AccountName和AccountKey完全正确,存储账户密钥默认拥有全权限。

内容的提问来源于stack exchange,提问作者Armando Rojas Valdez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:33:21