如何使用@azure/storage-blob直接在Azure Blob容器间复制文件
同一Azure存储账户内直接复制Blob(无需本地中转)
当然有更高效的方法——使用@azure/storage-blob提供的服务器端复制功能,通过beginCopyFromURL方法直接在Azure存储服务器内部完成文件复制,完全不需要将文件下载到本地缓冲区,既节省带宽又减少内存占用。
修正后的实现代码
const blobServiceClient = BlobServiceClient.fromConnectionString(BLOB_CONNECTION_STRING); const sourceContainerClient = blobServiceClient.getContainerClient(SOURCE_CONTAINER_NAME); const sourceBlockBlobClient = sourceContainerClient.getBlockBlobClient(filename); const destinationContainerClient = blobServiceClient.getContainerClient(DESTINATION_CONTAINER_NAME); // 修正原代码中的变量名错误:finalContainerClient → destinationContainerClient const destinationBlockBlobClient = destinationContainerClient.getBlockBlobClient(filename); // 发起服务器端复制请求 const copyPoller = await destinationBlockBlobClient.beginCopyFromURL(sourceBlockBlobClient.url); // 等待复制操作完成(同步等待,根据业务场景也可以异步处理) await copyPoller.pollUntilDone();
关键说明
- 服务器端复制:该操作由Azure存储服务直接执行,数据不会经过你的应用服务器,复制效率远高于本地中转的方式
- 权限要求:由于是同一存储账户内的复制,只要你的
BlobServiceClient拥有足够权限(比如使用账户连接字符串),直接使用源Blob的URL即可,无需额外生成SAS令牌 - 大文件友好:对于大文件,这种方式避免了本地内存溢出的风险,同时大幅缩短复制时间
内容的提问来源于stack exchange,提问作者ronssm
相关产品推荐
相关产品推荐

