如何在Azure File Share中无需提前知晓大小流式上传文件?
无需提前知晓流大小的Azure文件共享流式上传方法
你遇到的问题是因为CreateAsync方法必须预先知道文件大小,而部分流(如网络流、动态生成的流)不支持Length属性,导致调用报错。以下是两种无需提前获取流长度的替代方案:
方案一:直接使用UploadAsync重载
无需预先调用CreateAsync,UploadAsync的部分重载支持直接上传未知长度的流,内部会自动完成文件创建和上传流程:
private async Task UploadStreamAsync(Stream stream, CancellationToken token = default) { ShareFileClient client = GetShareFileClient(); // overwrite参数控制是否覆盖已存在的文件,根据业务需求调整 await client.UploadAsync(stream, overwrite: true, cancellationToken: token); }
方案二:使用OpenWriteAsync获取可写流
通过OpenWriteAsync获取Azure文件的可写流,再将源流复制到该可写流中,这种方式更灵活,适合需要自定义缓冲区或分块逻辑的场景:
private async Task UploadStreamAsync(Stream stream, CancellationToken token = default) { ShareFileClient client = GetShareFileClient(); using var azureWriteStream = await client.OpenWriteAsync(overwrite: true, cancellationToken: token); // 81920为缓冲区大小,可根据流的类型和性能需求调整 await stream.CopyToAsync(azureWriteStream, 81920, token); }
这两种方案都不需要依赖流的Length属性,能完美适配不支持该属性的流场景。
内容的提问来源于stack exchange,提问作者afeygin
相关产品推荐
相关产品推荐

