收藏
回答

HTTP API上传图片问题?

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>
回答关注问题邀请回答
收藏

2 个回答

  • 古月
    古月
    2021-07-02

    分享一下,看能帮助其它人吗,同样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);

                }

            })


    2021-07-02
    有用
    回复
  • MGee
    MGee
    2021-05-02

    能发帖求助的肯定找了很久问题,我是这个问题我觉得很隐蔽了,这个解决了就上传成功了,特意来回复下!contentType后要带上 boundary=---XXXXXX

    就是这样:

    contentType":"multipart/form-data; boundary=---------------------------7db1851cd1158",


    2021-05-02
    有用
    回复 1
    • 新微云科技
      新微云科技
      2022-03-13
      multipart/form-data; charset=utf-8; boundary=__X_PAW_BOUNDARY__"


      __X_PAW_BOUNDARY_ 这个值是什么?
      2022-03-13
      回复
登录 后发表内容
问题标签