# @adobe/aem-upload 中文文档

规范地址：https://npmcn.com/package/%40adobe/aem-upload/

版本：2\.0\.5
npm 元数据更新时间：2026-10-01T01:31:57.643Z
中文译文更新时间：2026-11-05T22:15:13.953Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40adobe/aem-upload
原文对照：https://npmcn.com/package/%40adobe/aem-upload/?lang=original
项目主页：https://github.com/adobe/aem-upload#readme
源码仓库：https://github.com/adobe/aem-upload

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：394 kB，57 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：7 个
- 首次发布：2019-10-08T23:03:30.410Z
- 最新版本发布：2026-06-10T16:23:03.804Z
- 近 30 天下载量：13527（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：36（近 12 个月 1 个）

## 中文简介

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

## 安装

```sh
npm install @adobe/aem-upload
```

也可以使用：`pnpm add @adobe/aem-upload`、`yarn add @adobe/aem-upload`、`bun add @adobe/aem-upload`

## README

-   [背景情况](https://npmcn.com/package/%40adobe/aem-upload/#readme-background)
-   [命令行](https://npmcn.com/package/%40adobe/aem-upload/#readme-command-line)
-   [使用量](https://npmcn.com/package/%40adobe/aem-upload/#readme-usage)
    -   [安装](https://npmcn.com/package/%40adobe/aem-upload/#readme-install)
    -   [要求模块](https://npmcn.com/package/%40adobe/aem-upload/#readme-requiring-the-module)
    -   [上传文件](https://npmcn.com/package/%40adobe/aem-upload/#readme-uploading-files)
        -   [支持的选项](https://npmcn.com/package/%40adobe/aem-upload/#readme-supported-options)
            -   [直接二进制上传选项](https://npmcn.com/package/%40adobe/aem-upload/#readme-direct-binary-upload-options)
            -   [上传文件选项](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-file-options)
        -   [处理错误](https://npmcn.com/package/%40adobe/aem-upload/#readme-error-handling)
        -   [上传事件](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-events)
            -   [上传会话数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-session-data)
            -   [文件夹事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-folder-event-data)
            -   [文件事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-event-data)
            -   [文件进度事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-progress-event-data)
            -   [文件出错事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-error-event-data)
            -   [错误事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-error-event-data)
    -   [上传本地文件](https://npmcn.com/package/%40adobe/aem-upload/#readme-uploading-local-files)
        -   [支持的文件选项](https://npmcn.com/package/%40adobe/aem-upload/#readme-supported-file-options)
    -   [日志](https://npmcn.com/package/%40adobe/aem-upload/#readme-logging)
    -   [代理支持](https://npmcn.com/package/%40adobe/aem-upload/#readme-proxy-support)
-   [特征](https://npmcn.com/package/%40adobe/aem-upload/#readme-features)
-   [释放](https://npmcn.com/package/%40adobe/aem-upload/#readme-releasing)
-   [捐款](https://npmcn.com/package/%40adobe/aem-upload/#readme-contributing)
-   [许可证发放](https://npmcn.com/package/%40adobe/aem-upload/#readme-licensing)
-   [维护者](https://npmcn.com/package/%40adobe/aem-upload/#readme-maintainers)

# 背景情况

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

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

![](https://npmcn.com/package/%40adobe/aem-upload/doc/aem-fastingest-nui-architecture-overview.png)

# 命令行

用于将资产上传到 AEM 实例的命令行工具可作为 Adobe I/O CLI 的插件 。 请 见 [插件仓库](https://github.com/adobe/aio-cli-plugin-aem) 更多信息.

# 使用量

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

## 安装

这个项目使用 [节点](http://nodejs.org/) 财务报告和审定财务报表 [无](https://npmjs.com/)检查他们是否在当地安装.

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

```sh
$ npm install @adobe/aem-upload
```

## 要求模块

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

1.  [安装](https://npmcn.com/package/%40adobe/aem-upload/#readme-install) 模块.
2.  需要javascript文件中的模块, 其消耗地点 :

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

## 上传文件

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

```javascript
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 的文件列表 。 阵列中的每个项目应是一个简单的对象,其属性在 [上传文件](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-file-options)。 。 。 . |
| `withHttpOptions(<object>)` | 无 | 消费者可以控制库在提交HTTP请求时会为获取API提供的选项. 这些选项将逐一传递给获取, 因此消费者应当引用获取 API 文档来确定哪些值是适用的 .  
  
此外,该图书馆还使用 [@ adobe/ cloud- service-客户端](https://github.com/adobe/cloud-service-client),所以通过一个 `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秒等. |

#### 上传文件选项

| 财产 | 需求 | 类型 | 说明 |
| --- | --- | --- | --- |
| `fileName` | Y | 字符串 | 文件名称将出现在 AEM 中 。 此值 _没有_ 需要URI编码. |
| `fileSize` | Y | 编号 | 要上传的文件的总大小, 以字节表示 . |
| `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`。 。 。 .

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

```javascript
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
        }
    });
```

处理个人文件错误的另一种方式是监听上传进程 [活动](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-events)。 。 。 .

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

### 上传事件

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

| 活动 | 说明 | 数据 |
| --- | --- | --- |
| `fileuploadstart` | 显示一个或多个文件的上传开始. | [上传会话数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-session-data) |
| `fileuploadend` | 显示一个或多个文件的上传完成. | 包含同样由库返回的上传结果信息的简单 Javascript 对象 `upload()` 方法. |
| `filestart` | 表示文件已经开始上传 . | [文件事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-event-data) |
| `fileprogress` | 表示文件已经开始上传 . | [文件进度事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-progress-event-data) |
| `fileend` | 显示文件已成功上传 。 这个活动将 _没有_ 如果文件上传因任何原因未能成功完成,则发送. | [文件事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-event-data) |
| `fileerror` | 如果文件因出错而上传失败, 则发送 。 如果文件上传成功, 此事件将不会被发送 . | [文件出错事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-error-event-data) |
| `foldercreated` | 显示上传进程在目标中创建了新文件夹 . | [文件夹事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-folder-event-data) |

#### 上传会话数据

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

#### 文件夹事件数据

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

#### 文件事件数据

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

#### 文件进度事件数据

此事件数据包括来自 [文件事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-event-data),加上:

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

#### 文件出错事件数据

此事件数据包括来自 [文件事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-file-event-data),加上:

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `errors` | [错误事件数据 \[\]](https://npmcn.com/package/%40adobe/aem-upload/#readme-error-event-data) | 数组 [错误事件数据](https://npmcn.com/package/%40adobe/aem-upload/#readme-error-event-data) 描述上传时发生的错误. |

#### 错误事件数据

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `code` | 字符串 | 表示一般类型的出错。 看这个应用 [常数](https://npmcn.com/package/%40adobe/aem-upload/src/constants.js) 用于可能的值. |
| `message` | 字符串 | 更多关于错误的描述信息 . |
| `innerStack` | 字符串 | 当存在时,导致错误的代码堆栈. |

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

```javascript
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` 活动。 详情见事件文档.

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

```javascript
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`,用于上传本地文件。 临Τ [默认选项](https://npmcn.com/package/%40adobe/aem-upload/#readme-supported-options),有以下选项.

| 选项 | 需求 | 说明 |
| --- | --- | --- |
| `withMaxUploadFiles(<number>)` | 无 | 默认值:1000. 库试图上传的文件的最大数量 。 如果目标上传超过这个数字,则进程将失败,但有例外. |
| `withDeepUpload(<boolean>)` | 无 | 默认:虚假。 如果选中的话, 进程将包含所有要上传的后人文件夹和文件 。 如果错误, 进程将只将这些文件立即上传到文件夹内进行上传 . |
| `withFolderNodeNameProcessor(<function<Promise>>)` | 无 | 在进行深层上传时,该工具将在AEM中创建匹配正在上传的本地文件夹的文件夹. 该工具会在为每个文件夹创建节点名称时"清理"某些字符的文件夹名. 未修改的文件夹名称会成为节点的标题.  
  
此选项允许定制清理文件夹名的功能 。 选择应当是: `function`。它将得到一个单一的参数值:要清理的文件夹名称。 该函数的返回值应为: `Promise`,它应该用干净的文件夹名称解决.  
  
默认功能会将文件夹名称转换为小写并替换白空间和任何字符 `%;#,+?^{}` 和选项中指定的重置值.  
  
不论这一功能如何,图书馆将 _永远_ 替换任意字符 `./:[]` |
| `withAssetNodeNameProcessor(<function<Promise>>)` | 无 | 当执行深上传时,该工具将在AEM中创建与正在上传的本地文件相匹配的资产. 该工具在为每个资产创建节点名时会"清理"某些字符的文件名.  
  
此选项允许定制清理文件名的功能 。 选择应当是: `function`。它将得到一个单一的参数值:要清理的文件名称。 该函数的返回值应为: `Promise`,它应该用干净的资产名称解决.  
  
默认功能将替换任何字符 `#%{}?&` 和选项中指定的重置值.  
  
不论这一功能如何,图书馆将 _永远_ 替换任意字符`./:[]` |
| `withInvalidCharacterReplaceValue(<string>)` | 无 | 默认 : `-`。指定替换文件夹和资产节点名称中无效字符时使用的值。 此值用于清除文件夹/ 资产名的默认函数, 并且是 _永远_ 替换任意字符时使用 `./:[]` |
| `withUploadFileOptions(<UploadFileOptions>)` | 无 | 指定在上传每个文件作为文件系统上传的一部分时使用的选项。 大多数 [上传文件选项](https://npmcn.com/package/%40adobe/aem-upload/#readme-upload-file-options) 无效。 例外情况是 `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`。 。 。 .

# 特征

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

# 释放

此模块使用 [语义释放](https://github.com/semantic-release/semantic-release) 当发布新版本时。 合并后即启动这一进程 `master` 树枝。 审查语义-释放文件 承诺信息格式.

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

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

# 捐款

欢迎捐款! 读取 [贡献指南](https://npmcn.com/package/%40adobe/aem-upload/CONTRIBUTING.md) 更多信息.

# 许可证发放

这个项目根据Apache V2许可证获得许可. 见 [自由主义](https://npmcn.com/package/%40adobe/aem-upload/LICENSE) 更多信息.

# 维护者

-   [@张俊](https://github.com/FrancoisZhang)
-   [@马克·弗里斯贝伊(Mark Frisbey)](https://github.com/mfrisbey)

## 常见问题

### @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 和提交记录判断。

