app.post("/uploadfile", upload.single("file"), (req, res) => {
var file =req.file
promise.then(data => {
url = 'https://api.weixin.qq.com/tcb/uploadfile?access_token=' + JSON.parse(data).access_token
data = {
"env": 'laoqi-2gvugolvf7a76b77',
"path": 'demo/'+ file.originalname
}
getData(url, data).then(dataa => {
var res = dataa
if (res.errmsg == 'ok') {
requestData = {
'key': 'demo/'+ file.originalname,
'Signature': res['authorization'],
'x-cos-security-token': res['token'],
'x-cos-meta-fileid': res['cos_file_id'],
'file':{
value:fs.createReadStream(file.path),
options:{
'filename': file.originalname,
'contentType': file.mimetype
}
}
}
getData(res['url'], requestData).then(data2 => {
console.log(data2)
// res.send(data2)
}).catch(err => {
console.log(err)
res.send(err)
})
}
}).catch(err => {
console.log(err)
res.send(err)
})
}).catch(data => {
console.log(data);
})
})
一直报错
<?xml version='1.0' encoding='utf-8' ?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<Resource>cos.ap-shanghai.myqcloud.com/6c61-laoqi-2gvugolvf7a76b77-1304583758/demo/QQ图片20200711091851.jpg</Res
ource>
<RequestId>NWZlOTdkYzBfN2QzZjIyMDlfODQyYl8xY2RiY2Zj</RequestId>
<TraceId>OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTczMmZiNDZmZjBmNTV
jMGU4NTViNDhhYWVjNzNkNzI4NWM1YTFlYWZiODhiYTgwMjZhMzcyMjBmNWVlZTMzNjI=</TraceId>
</Error>
分享一下,看能帮助其它人吗,同样MethodNotAllowed错误,我发现不是服务器端问题,而是的客户端平台问题。我用的字节跳动的小程序平台:
data:是https://api.weixin.qq.com/tcb/uploadfile?access_token返回值
fileinfo:是tt.chooseImage后再tt.getImageInfo值
部分代码如下,核心思想是不能用tt.request方法,而是要用字节带的tt.uploadFile方法,就解决了,代码如下:
const fileSystemManager = tt.getFileSystemManager();
var filedata = fileSystemManager.readFileSync(fileinfo.path, "base64");
tt.uploadFile({
url: data.url,
filePath: fileinfo.path,
contentType: "multipart/form-data; charset=utf-8; boundary=__X_PAW_BOUNDARY__",
name: "file",
formData: {
"Signature": data.authorization,
"key": filepath,
"x-cos-security-token": data.token,
"x-cos-meta-fileid": data.cos_file_id,
"file": {
value: filedata,
options: {
filename: filename,
contentType: fileinfo.type
}
}
},
success(res) {
console.log("uploadfile 调用成功", res);
// if (res.data.errcode != 0) {
// reject(res.data);
// } else {
resolve(res);
// }
},
fail(err) {
console.log("uploadfile 调用失败:", err);
reject(err);
}
})
能发帖求助的肯定找了很久问题,我是这个问题我觉得很隐蔽了,这个解决了就上传成功了,特意来回复下!contentType后要带上 boundary=---XXXXXX
就是这样:
contentType":"multipart/form-data; boundary=---------------------------7db1851cd1158",
__X_PAW_BOUNDARY_ 这个值是什么?