multipart/form-data 未收到 REST post 信息
REST post informations not received with multipart/form-data
使用 Restify 和 Mongoose,我构建了一个基本的 REST API。只要我发送内容为 application/json
的 JSON 内容,一切都正常。
但现在我需要连同内容一起发送图像,所以我切换到 multipart/form-data
以获取特定路由。而且好像根本获取不到内容
这是发送到我 API 失眠症的基本设置:
很简单。 Mongodb 模型目前只需要 filename
和 url
(一旦可行,我将处理文件本身)。
这是我从服务器得到的响应:
{
"code": "Internal",
"message": "Media validation failed: url: Path `url` is required., filename: Path `filename` is required."
}
所以它说它没有任何字段内容。
时间轴显示字段已发送:
> POST /medias HTTP/1.1
> Host: localhost:3030
> User-Agent: insomnia/6.0.2
> Content-Type: multipart/form-data; boundary=X-INSOMNIA-BOUNDARY
> Accept: */*
> Content-Length: 221
| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="filename"
| test.jpg
| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="url"
| https://images.test.com/test.jpg
| --X-INSOMNIA-BOUNDARY--
* We are completely uploaded and fine
< HTTP/1.1 500 Internal Server Error
< Server: TestServer
< Content-Type: application/json
< Content-Length: 125
< Connection: Keep-Alive
< Content-MD5: KI89enLnYv9oMJxg5k4MXA==
< Date: Sun, 12 Aug 2018 22:50:31 GMT
< Request-Id: b20babc1-9f1b-466b-af7c-13d385cd8023
< Response-Time: 6
* Received 125 B chunk
* Connection #65 to host localhost left intact
这是我的函数:
server.post('/medias', (req, res, next) => {
if (!req.is('multipart/form-data')) {
return next(
new errors.InvalidContentError(`Expects 'multipart/form-data'`)
)
}
let data = req.body || {}
let media = new Media(data)
media.save((err) => {
if (err) {
return next(new errors.InternalError(err.message))
next()
}
res.send(201)
next()
})
})
req.body
上的 console.log
表明它是空的。我已经安慰 req
本身,看看数据是否可以存储在其他地方,但我找不到任何东西。
我在这里错过了什么?提前谢谢你。
嗯,终于用base64编码搞定了
使用 Restify 和 Mongoose,我构建了一个基本的 REST API。只要我发送内容为 application/json
的 JSON 内容,一切都正常。
但现在我需要连同内容一起发送图像,所以我切换到 multipart/form-data
以获取特定路由。而且好像根本获取不到内容
这是发送到我 API 失眠症的基本设置:
很简单。 Mongodb 模型目前只需要 filename
和 url
(一旦可行,我将处理文件本身)。
这是我从服务器得到的响应:
{
"code": "Internal",
"message": "Media validation failed: url: Path `url` is required., filename: Path `filename` is required."
}
所以它说它没有任何字段内容。
时间轴显示字段已发送:
> POST /medias HTTP/1.1
> Host: localhost:3030
> User-Agent: insomnia/6.0.2
> Content-Type: multipart/form-data; boundary=X-INSOMNIA-BOUNDARY
> Accept: */*
> Content-Length: 221
| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="filename"
| test.jpg
| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="url"
| https://images.test.com/test.jpg
| --X-INSOMNIA-BOUNDARY--
* We are completely uploaded and fine
< HTTP/1.1 500 Internal Server Error
< Server: TestServer
< Content-Type: application/json
< Content-Length: 125
< Connection: Keep-Alive
< Content-MD5: KI89enLnYv9oMJxg5k4MXA==
< Date: Sun, 12 Aug 2018 22:50:31 GMT
< Request-Id: b20babc1-9f1b-466b-af7c-13d385cd8023
< Response-Time: 6
* Received 125 B chunk
* Connection #65 to host localhost left intact
这是我的函数:
server.post('/medias', (req, res, next) => {
if (!req.is('multipart/form-data')) {
return next(
new errors.InvalidContentError(`Expects 'multipart/form-data'`)
)
}
let data = req.body || {}
let media = new Media(data)
media.save((err) => {
if (err) {
return next(new errors.InternalError(err.message))
next()
}
res.send(201)
next()
})
})
req.body
上的 console.log
表明它是空的。我已经安慰 req
本身,看看数据是否可以存储在其他地方,但我找不到任何东西。
我在这里错过了什么?提前谢谢你。
嗯,终于用base64编码搞定了