qiniu / dart-sdk

Qiniu Resource (Cloud) Storage SDK for Dart
24 stars 25 forks source link

如果上传的文件已存在,如何覆盖文件 #62

Closed philos3 closed 1 year ago

philos3 commented 1 year ago

如果上传的文件已存在,如何覆盖文件

存在需要多次上传覆盖的场景,如果每次都是用新的key,将是一种资源浪费

huangbinjie commented 1 year ago

key 如果不设置是后端返回给你的,如果你上传了相同的文件(hash),则似乎会返回给你相同的 key @yinxulai 确认下吧

philos3 commented 1 year ago

key是本地传的,文件肯定hash不一样的,因为会一直增量写入log,整个文件的hash值也会变化。

上传报错,提示文件已存在,期望的是直接覆盖,因为key一样的,理应覆盖。

报错信息如下: StorageStatus.Error error.type =StorageErrorType.RESPONSE error.message={error: file exists} Http status error [614]

huangbinjie commented 1 year ago

https://developer.qiniu.com/kodo/1206/put-policy 文档里有哈

philos3 commented 1 year ago

flutter SDK支持吗?PutOptions只有下面参数,如何设置,详细的flutter文档没找打,example也没有体现,麻烦告知如何,最好能提供示例代码。

class PutOptions { /// 资源名,如果不传则后端自动生成 final String key; /// 强制使用直传,不使用分片 final bool forceBySingle; /// 使用分片上传时的分片大小,默认值 4,单位为 MB final int partSize; /// 并发上传的队列长度,默认值为 5 final int maxPartsRequestNumber; /// 控制器 final PutController controller; }

philos3 commented 1 year ago

image 这里有个insertOnly=0就可以吗,问题是在哪里设置,flutter sdk 传递??

yinxulai commented 1 year ago

上传对象本身的写行为设定是通过 putPolicy 来控制的,putPolicy 包含在你的 uploadToken 中, flutter-sdk 作为客户端 SDK,暂时没有直接支持生成 token 的能力,只是消费 uploadToken,所以你需要调整你生成 uploadToken 的参数来达到覆盖的目的

philos3 commented 1 year ago
image
LeoAiolia commented 11 months ago

最终意思是需要服务端解决吗