问题分析 上述代码实现了文件下载、查询、删除的能力。 代码中downloadtask.downloadFile()没有填写fileName字段,快应用引擎会默认从网络请求或url中获取文件名。 此时在success回调中返回的字段filePath中文件名为“random2000.bin?auth_key=1627344862-6B5A47E8B8FF40E38021DEAA14E2C5FD-0-519320d987b2717bd7b35a84ad193125”,可以看出文件名中含有多个特殊字符。而项目中所有文件需按照规范进行命名:文件名只能包含字母、数字、点、下划线、中划线、小括号,不能包含".."、"./"等字符,文件名长度不能超过300个字符。 file.delete接口删除文件时需要填入文件路径,很明显,上述下载的文件名中有“?”和“=”不符合要求,所以引擎校验不通过,会返回300错误码。 解决方法 在downloadtask.downloadFile接口下载时加上filename参数,对下载文件重命名。 代码如下: click() {
this.download_task = downloadtask.downloadFile({
header: {
"host": "windspeed-drcn.dbankcdn.com"
},
url: "https://640aa0d6fddbf8651e2232aaf3162e67.cc.cdnhwc5.com/download/random2000.bin?auth_key=1627344862-6B5A47E8B8FF40E38021DEAA14E2C5FD-0-519320d987b2717bd7b35a84ad193125",/*非真实地址*/
filename: "test.bin", //对下载文件进行重命名
success(res) {
console.log("Download success. resp = " + JSON.stringify(res))
},
fail(res) {
console.log("Download fail. resp = " + JSON.stringify(res))
}
})
this.download_task.onProgressUpdate(res => {
console.log("Download onProgressUpdate = " + JSON.stringify(res))
})
}, 正确日志如下: 08-04 08:37:52.823 I/jsLog (12036): Download onProgressUpdate = {"progress":100,"totalBytesWritten":2250,"totalBytesExpectedToWrite":2250}
08-04 08:37:52.829 I/jsLog (12036): Download success. resp = {"filePath":"internal://mass/Download/test.bin","header":{"X-Frame-Options":"SAMEORIGIN","Connection":"keep-alive","Set-Cookie":"AUTHSESSID=e347f58b1572; HttpOnly;Secure;","Content-Length":"2250","Date":"Wed, 04 Aug 2021 00:37:50 GMT","Content-Type":"text/html"},"statusCode":200}
08-04 08:37:54.638 I/jsLog (12036): [{"lastModifiedTime":1628037472000,"length":2250,"type":"file","uri":"internal://mass/Download/test.bin"}]
08-04 08:37:54.638 I/jsLog (12036): internal://mass/Download/test.bin
08-04 08:37:56.023 I/jsLog (12036): handling success
|