@adobe/aem-upload

中文文档
2.0.5发布于 2026/06/11Apache-2.0CommonJS近 30 天下载 1.4万

自动取款机 资产直接二进制访问上传工具

中文使用文档
文档目录10 节
  1. 安装
  2. 要求模块
  3. 上传文件
  4. 支持的选项
  5. 处理错误
  6. 上传事件
  7. 上传本地文件
  8. 支持的文件选项
  9. 日志
  10. 代理支持

背景情况

在 AEM 资产 6.5 和 先前中,向服务器发送一个邮件请求,以管理资产二进制即可上传文件。 可配置更新的 AEM 版本 用于直接上传二进制,这意味着资产二进制不再直接上传到AEM. 因为这样,有一个更复杂的 上传资产二进制时遵循的算法。 此库将检查目标 AEM 实例的配置, 并视配置情况使用直接的二进制上传算法或创建资产服务器 .

提供此工具便于上传, 可以用作命令行可执行文件 或要求作为节点.js模块.

命令行

用于将资产上传到 AEM 实例的命令行工具可作为 Adobe I/O CLI 的插件 。 请 见 插件仓库 更多信息.

使用量

此库支持将文件上传到目标实例,同时为监测提供支持 转让进度、取消转让和其他特性.

安装

这个项目使用 节点 财务报告和审定财务报表 无检查他们是否在当地安装.

它可以像其他任何节点.js模块一样被安装.

$ npm install @adobe/aem-upload

要求模块

要将模块添加到您的 Node.js 项目中:

  1. 安装 模块.
  2. 需要javascript文件中的模块, 其消耗地点 :
const DirectBinary = require('@adobe/aem-upload');

上传文件

下面是上传文件到目标 AEM 实例所需的最小码量 .

const DirectBinary = require('@adobe/aem-upload');

// URL to the folder in AEM where assets will be uploaded. Folder
// must already exist.
const targetUrl = 'http://localhost:4502/content/dam/target';

// list of all local files that will be uploaded.
const uploadFiles = [
    {
        fileName: 'file1.jpg', // name of the file as it will appear in AEM
        fileSize: 1024, // total size, in bytes, of the file
        filePath: '/Users/me/Documents/my_file.jpg' // Full path to the local file
    },
    {
        fileName: 'file2.jpg',
        fileSize: 512,
        filePath: '/Users/me/Documents/file2.jpg'
    }
];

const upload = new DirectBinary.DirectBinaryUpload();
const options = new DirectBinary.DirectBinaryUploadOptions()
    .withUrl(targetUrl)
    .withUploadFiles(uploadFiles);

// this call will upload the files. The method returns a Promise, which will be resolved
// when all files have uploaded.
upload.uploadFiles(options)
    .then(result => {
        // "result" contains various information about the upload process, including
        // performance metrics and errors that may have occurred for individual files

        // at this point, assuming no errors, there will be two new assets in AEM:
        //  http://localhost:4502/content/dam/target/file1.jpg
        //  http://localhost:4502/content/dam/target/file2.jpg
    })
    .catch(err => {
        // the Promise will reject if something causes the upload process to fail at
        // a high level. Note that individual file failures will NOT trigger this

        // "err" will be an instance of UploadError. See "Error Handling"
        // for more information
    });

支持的选项

直接二进制上传选项

这个 DirectBinaryUploadOptions 类支持以下选项.

选项需求说明
withUrl(<string>)Y在指定文件将被上传的目标实例中, 完整、 绝对 URL 到文件夹 。 此值预计将被编码为 URI .
withUploadFiles(<UploadFile[]>)Y将上传到目标 URL 的文件列表 。 阵列中的每个项目应是一个简单的对象,其属性在 上传文件。 。 。 .
withHttpOptions(<object>)无消费者可以控制库在提交HTTP请求时会为获取API提供的选项. 这些选项将逐一传递给获取, 因此消费者应当引用获取 API 文档来确定哪些值是适用的 .

此外,该图书馆还使用 @ adobe/ cloud- service-客户端,所以通过一个 cloudClient 也支持该图书馆文档中描述的属性.
withConcurrent(<boolean>)无默认 : false如果 true,在提供的上传文件列表中的多个文件会同时传输. 若为 false,每次只传送一个文件,下一个文件直到当前文件完成后才开始传送.
withMaxConcurrent(<number>)无默认 : 5。任意时间允许的并行HTTP请求的最大数量。 如本报告所述 withConcurrent() 选项,库将同时上传多个文件。 此值基本上表示进程将同时上传的最大文件数量.

小于2的值将指示库 没有 要同时上传多个文件.
withHttpRetryCount()无默认 : 3。进程在放弃前将重试失败的 HTTP 请求的次数 。 例如,如果重试计数为3,那么如果回复显示失败,进程将最多提交3次相同的HTTP请求.
withHttpRetryDelay()无默认 : 5。进程等待的时间,然后重试失败的 HTTP 请求。 数值以毫秒表示。 每次重复试验后,延迟将增加其价值。 例如,如果延迟为5000,那么第一次重试将等5秒,第二次10秒,第三次15秒等.

上传文件选项

财产需求类型说明
fileNameY字符串文件名称将出现在 AEM 中 。 此值 没有 需要URI编码.
fileSizeY编号要上传的文件的总大小, 以字节表示 .
filePath无字符串要上传的本地文件的完整路径 。 注意,该数值之一 或者说 blob 必须指明。 此选项通常在从节点.js进程运行上传工具时最为有用.
blob无文件文件的数据 。 此属性的唯一测试和支持值是 value hTML 语言 <input type='file' />。请注意,无论是这种财产 或者说 filePath 必须指明。 此选项在从浏览器运行上传工具时通常最有用 .
partHeaders无对象转发的文件的每个部分将包含标题值 。 信头来自 DirectBinaryUploadOptions 仅包含在发送到 AEM 的请求中; 当发送请求到 AEM 提供的直接二进制上传 URI 时,它们会被忽略。 此选项提供了一种手段,用于指定在发送给这些URI的请求中应当包含的任何额外的信头.
createVersion无布尔默认 : false如果 true 并且已有给定名称的资产,此进程将创建一个新版本的资产,而不是用新的二进制更新当前版本.
versionLabel无字符串默认 : null。如果进程创建了新版本的资产,则与新创建版本相关的标签.
versionComment无字符串默认 : null。如果进程创建了新版本的资产,则注释与新创建的版本相关.
replace无布尔默认 : false如果 true 和已存在给定名称的资产,此进程将删除已存在的资产并创建一个同名和新二进制的新资产.

请注意,如果这一选项和 createVersion 具体说明, createVersion 将优先.

处理错误

如果文件上传失败, 进程会移动到列表中的下一个文件 。 二. 总体进程 只有当灾难发生 阻止它继续发生 上传文件。 由消费者来确定是否有个人文件上传 失败并作出相应反应.

上传过程报告的所有出错都将是 UploadError,这些是 标准日记 Error 额外实例 code 表示的数值 错误类型。 具体代码见 DirectBinary.DirectBinaryUploadErrorCodes。 。 。 .

以下是处理错误的例子,无论是在进程还是文件级别.

const codes = DirectBinary.DirectBinaryUploadErrorCodes;
const upload = new DirectBinary.DirectBinaryUpload();
upload.uploadFiles(options) // assume that options is defined previously
    .then(result => {
        // use this method to retrieve ALL errors during the process
        const { errors = [] } = result;
        errors.forEach(error => {
            if (error.code === codes.ALREADY_EXISTS) {
                // handle case where a file already exists
            }
        });
        const { detailedResult = [] } = result;
        // or retrieve individual file errors
        detailedResult.forEach((fileResult) => {
            const { result = {} } = fileResult;
            const { errors = [] } = result;
            errors.forEach((fileErr) => {
                // content of fileErr may vary
            });
        });
    })
    .catch(err => {
        if (err.code === codes.NOT_SUPPORTED) {
            // handle case where direct binary access is not enabled
            // on the target instance
        }
    });

处理个人文件错误的另一种方式是监听上传进程 活动。 。 。 .

进程执行自动 HTTP 重试处理, 即如果 HTTP 请求失败 然后进程将等待指定的间隔, 并重试相同的 HTTP 请求给定 次数。 如果请求在给定的复试次数后仍然失败,则会 使用最后一个错误将错误报告为正常。 导致重试的任何错误,在 无论是成功还是失败的情景,都将在结果中加以报告 结构.

上传事件

随着上传过程通过单个文件移动,它会随时间推移发送事件 通过文件上传的阶段。 这些事件列举如下.

活动说明数据
fileuploadstart显示一个或多个文件的上传开始.上传会话数据
fileuploadend显示一个或多个文件的上传完成.包含同样由库返回的上传结果信息的简单 Javascript 对象 upload() 方法.
filestart表示文件已经开始上传 .文件事件数据
fileprogress表示文件已经开始上传 .文件进度事件数据
fileend显示文件已成功上传 。 这个活动将 没有 如果文件上传因任何原因未能成功完成,则发送.文件事件数据
fileerror如果文件因出错而上传失败, 则发送 。 如果文件上传成功, 此事件将不会被发送 .文件出错事件数据
foldercreated显示上传进程在目标中创建了新文件夹 .文件夹事件数据

上传会话数据

财产类型说明
uploadId字符串一个可用于识别上传会话的独特标识符.
fileCount编号作为上传会话的一部分将上传的文件总数 .
totalSize编号作为上传会话的一部分而上传的所有文件的总大小, 以字节表示 .
directoryCount编号上传会话中包含的目录数量 .

文件夹事件数据

财产类型说明
folderName字符串文件夹的名称(即标题),因为它是创建的. 这个会 没有 成为URI编码值.
targetParent字符串创建文件夹的 AEM 文件夹的完整路径 。 这个会 没有 成为URI编码值.
targetFolder字符串创建的 AEM 文件夹的完整路径 。 这个会 没有 成为URI编码值.

文件事件数据

财产类型说明
fileName字符串上传选项中指定的文件名称 。 这个会 没有 成为URI编码值.
fileSize编号上传选项中指定的文件大小, 以字节表示 .
targetFolder字符串上传文件的 AEM 文件夹的完整路径 。 这个会 没有 成为URI编码值.
targetFile字符串AEM 中资产的全部路径 。 这个会 没有 成为URI编码值.
mimeType字符串HTTP 密码 内容 - 类型 文件的值.

文件进度事件数据

此事件数据包括来自 文件事件数据,加上:

财产类型说明
transferred编号文件上传至今的字节数 。 这将是一个累积值,每次发送事件都会增加.

文件出错事件数据

此事件数据包括来自 文件事件数据,加上:

财产类型说明
errors错误事件数据 []数组 错误事件数据 描述上传时发生的错误.

错误事件数据

财产类型说明
code字符串表示一般类型的出错。 看这个应用 常数 用于可能的值.
message字符串更多关于错误的描述信息 .
innerStack字符串当存在时,导致错误的代码堆栈.

以下是如何处理各种事件的例子.

const upload = new DirectBinary.DirectBinaryUpload();
upload.on('filestart', data => {
    const { fileName } = data;

    // specific handling that should occur when a file begins uploading
});
upload.on('fileprogress', data => {
    const { fileName, transferred } = data;

    // specific handling that should occur as a file uploads
});
upload.on('fileend', data => {
    const { fileName } = data;

    // specific handling that should occur when a file finishes uploading successfully
});
upload.on('fileerror', data => {
    const { fileName, errors } = data;

    // specific handling that should occur when a file files to upload
});

// assume options has been declared previously
upload.uploadFiles(options);

上传本地文件

库支持上传本地文件和文件夹. 对于文件夹, 工具 将包含文件夹中的所有即时儿童文件。 它不会处理子文件夹, 除非指定“ 深上传” 选项 .

当深度上传时,库会创建目标中的文件夹结构来映射正在上传的文件夹. 新书的标题 创建的文件夹将匹配本地文件系统中存在的文件夹名称 。 目标路径可根据 路径字符限制,并取决于上传中提供的选项(参见“处理文件夹节点名称的功能”) 更多信息.

当图书馆创建新文件夹时,它就会发出 foldercreated 活动。 详情见事件文档.

以下示例说明了如何上传本地文件.

const {
    FileSystemUploadOptions,
    FileSystemUpload
} = require('@adobe/aem-upload');

// configure options to use basic authentication
const credentials = Buffer.from('admin:admin').toString('base64')
const options = new FileSystemUploadOptions()
    .withUrl('http://localhost:4502/content/dam/target-folder')
    .withHttpOptions({
        headers: {
            Authorization: `Basic ${credentials}`
        }
    });

// upload a single asset and all assets in a given folder
const fileUpload = new FileSystemUpload();
await fileUpload.upload(options, [
    '/Users/me/myasset.jpg',
    '/Users/me/myfolder'
]);

支持的文件选项

有一套选择, FileSystemUploadOptions,用于上传本地文件。 临Τ 默认选项,有以下选项.

选项需求说明
withMaxUploadFiles(<number>)无默认值:1000. 库试图上传的文件的最大数量 。 如果目标上传超过这个数字,则进程将失败,但有例外.
withDeepUpload(<boolean>)无默认:虚假。 如果选中的话, 进程将包含所有要上传的后人文件夹和文件 。 如果错误, 进程将只将这些文件立即上传到文件夹内进行上传 .
withFolderNodeNameProcessor(<function<Promise>>)无在进行深层上传时,该工具将在AEM中创建匹配正在上传的本地文件夹的文件夹. 该工具会在为每个文件夹创建节点名称时"清理"某些字符的文件夹名. 未修改的文件夹名称会成为节点的标题.

此选项允许定制清理文件夹名的功能 。 选择应当是: function。它将得到一个单一的参数值:要清理的文件夹名称。 该函数的返回值应为: Promise,它应该用干净的文件夹名称解决.

默认功能会将文件夹名称转换为小写并替换白空间和任何字符 %;#,+?^{} 和选项中指定的重置值.

不论这一功能如何,图书馆将 永远 替换任意字符 ./:[]
withAssetNodeNameProcessor(<function<Promise>>)无当执行深上传时,该工具将在AEM中创建与正在上传的本地文件相匹配的资产. 该工具在为每个资产创建节点名时会"清理"某些字符的文件名.

此选项允许定制清理文件名的功能 。 选择应当是: function。它将得到一个单一的参数值:要清理的文件名称。 该函数的返回值应为: Promise,它应该用干净的资产名称解决.

默认功能将替换任何字符 #%{}?& 和选项中指定的重置值.

不论这一功能如何,图书馆将 永远 替换任意字符./:[]
withInvalidCharacterReplaceValue(<string>)无默认 : -。指定替换文件夹和资产节点名称中无效字符时使用的值。 此值用于清除文件夹/ 资产名的默认函数, 并且是 永远 替换任意字符时使用 ./:[]
withUploadFileOptions(<UploadFileOptions>)无指定在上传每个文件作为文件系统上传的一部分时使用的选项。 大多数 上传文件选项 无效。 例外情况是 fileName, (中文(简体) ), fileSize, (中文(简体) ), filePath,以及 blob,将被忽略.

日志

库会通过上传项目的过程记录各种消息. 它会使用它给定的日志, 只要对象支持方法 debug(), (中文(简体) ), info(), (中文(简体) ), warn(),以及 error()。为了尽可能详细,库中还假定这些方法中的每一方法都能够接受格式化的信息: log.info('message with %s', 'formatting');。无论格式化支持如何,记录都会奏效,但格式化工作正确时会有更多信息.

为图书馆提供记录器,通过 log 选项中的元素 DirectBinaryUpload 建筑师。 以下是一个简单的例子, 可以将所有库的信息记录到 console数字 :

const upload = new DirectBinary.DirectBinaryUpload({
  log: {
    debug: (...theArguments) => console.log.apply(null, theArguments),
    info: (...theArguments) => console.log.apply(null, theArguments),
    warn: (...theArguments) => console.log.apply(null, theArguments),
    error: (...theArguments) => console.log.apply(null, theArguments),
  }
});

请注意,这还将与难民署合作 FileSystemUpload 建筑师.

代理支持

库利用了Fetch API,因此在浏览器中运行时,代理设置会被浏览器检测和应用. 在Node.JS中,所有HTTP请求都直接被发送到目标,而不通过代理. 自动检测系统代理设置在Node.JS中不支持,但 消费者可以使用 DirectBinaryUploadOptions.withHttpOptions() 以证明 agent 建议的数值 node-fetch。 。 。 .

特征

  • 良好的调谐,以利用节点,实现最佳上传性能
  • 跟踪文件传输进度
  • 取消在进行中的转让
  • 传输多个“ 批量” 文件
  • 上传本地文件夹/文件结构

释放

此模块使用 语义释放 当发布新版本时。 合并后即启动这一进程 master 树枝。 审查语义-释放文件 承诺信息格式.

消息不符合语义发布格式的PR会 没有 生成新版本.

发布注释基于 git 承诺消息生成. 发布注释将出现在 CHANGELOG.md。 。 。 .

捐款

欢迎捐款! 读取 贡献指南 更多信息.

许可证发放

这个项目根据Apache V2许可证获得许可. 见 自由主义 更多信息.

维护者

版本与发布记录

@adobe/aem-upload 共发布 36 个版本,首次发布于 2019/10/09;过去 12 个月发布了 1 个版本。

版本发布日期距今
2.0.5latest2026/06/114 个月前
2.0.42025/08/041.3 年前
2.0.32024/01/302 年前
2.0.22023/08/043 年前
2.0.12023/05/273 年前
2.0.02023/04/223 年前

关于 @adobe/aem-upload 的常见问题

@adobe/aem-upload 是什么?

自动取款机 资产直接二进制访问上传工具

如何安装 @adobe/aem-upload?

在项目目录运行 npm install @adobe/aem-upload,或使用 pnpm add / yarn add / bun add。

@adobe/aem-upload 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/adobe__aem-upload 是否存在。

@adobe/aem-upload 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@adobe/aem-upload 可以商用吗?

@adobe/aem-upload 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@adobe/aem-upload 的下载量有多少?

根据 npm 官方下载统计,@adobe/aem-upload 在 2026/10/05 – 2026/11/03 这 30 天内被下载 13,527 次,日均约 451 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@adobe/aem-upload 还在维护吗?

最新版本 2.0.5 发布于 2026/06/11(4 个月前);至今共发布 36 个版本,其中过去 12 个月发布了 1 个;首次发布于 2019/10/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。