我注意到API文档里面有这么一句
资源的最终名称,位于key消息中。如不指定则使用上传策略saveKey字段所指定模板生成Key,如无模板则使用Hash值作为Key。
我在服务端设置的上传策略没有设置key
private String getUpToken0(){
return auth.uploadToken("bucket");
}
在js代码中也没有设置key
Qiniu.uploader({
runtimes: 'html5,flash,html4', //上传模式,依次退化
browse_button: btn_id, //上传选择的点选按钮,**必需**
uptoken : data.token,
domain: data.domain, //bucket 域名,下载资源时用到,**必需**
flash_swf_url: '../plugins/plupload/Moxie.swf', //引入flash,相对路径
max_retries: 3, //上传失败最大重试次数
dragdrop: false, //开启可拖曳上传
chunk_size: '200kb', //分块上传时,每片的体积
auto_start: true,
multi_selection:false,
filters : {
max_file_size : '200kb',
mime_types: [
{title : "Image files", extensions : "jpg,png"}
]
},
init: {
'FilesAdded': function(up, file) {
// 每个文件上传前,处理相关的事情
if(size>1){
if($(".img-area").length == size){
$.each(up.files, function (i, file) {
up.removeFile(file);
});
layer.alert('最多只允许上传'+size+'张图片!', {
closeBtn: false
});
}
}
},
'FileUploaded': function(up, file, info) {
$.each(up.files, function (i, file) {
up.removeFile(file);
});
},
'Error': function(up, err, errTip) {
}
}
});
现在奇怪的是,上传之后,并没有将文件重命名为hash,还是使用的原文件名。这样会导致我无法上传同名的不同文件。
但是我发现在init里面新增'Key': function(up, file) {}
就能重名了。请问,为什么会这样?
这句话的意思其实是,上传策略不指定key的同时,上传函数函数也不指定key,才会用文件的hash进行命名,在js-sdk中,https://github.com/qiniu/js-sdk/blob/master/src/qiniu.js#L295 会生成上传文件的key,如果初始化的uploader的时候,将
'key'
的自定义内容返回出来,那么就可以自定义上传文件的文件名了。遇到同样的问题。。感谢lz和楼上的