将二进制数据传递给 rest-api
passing binary data to rest-api
我想将缩略图上传到 viemo api ,并且基于 Vimeo 文档,我必须在请求正文中将缩略图文件作为二进制数据包含在内,我必须从客户端上传缩略图“ fontend”并将发送来自 rest-api“后端”的请求问题是我的 rest-api 无法接收二进制数据,因为我正在使用 express.js,有没有办法在后端处理二进制数据。
步骤如下:
客户端发送缩略图数据=>后端通过请求体接收数据并发送到=>端点
客户端请求
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData();
formData.append('selectedFile', new Blob([selectedFile], { type: 'application/json' }));
formData.append('uploadLink', uploadLink);
const headers = {
'Content-Type': 'application/json',
Accept: 'application/vnd.vimeo.*+json;version=3.4',
};
try {
axios
.post(`${backendPostPath}/thumbnail-upload`, formData, {
headers,
})
.then((response) => {
applyThumbnial();
console.log(`${uploadLink}link for upload`);
});
} catch (error) {
console.log(error);
}
};
后端请求无法接收前端请求的正文post作为二进制数据,
const ThumbnailUpload = async (req, res) => {
const { uploadLink } = req.body;
const { selectedFile } = req.body;
console.log(uploadLink);
const clientServerOptions = {
uri: `${uploadLink}`,
encoding: null,
body: JSON.stringify({
name: uploadLink,
file: selectedFile,
}),
method: 'PUT',
headers: {
'Content-Type': 'application/json',
Accept: 'application/vnd.vimeo.*+json;version=3.4',
Authorization: getVimeoAuthorization(),
},
};
request(clientServerOptions, function (error, response) {
if (error) {
res.send(error);
} else {
const body = JSON.parse(response.body);
res.send(body);
}
});
};
有没有办法让后端请求主体获取二进制数据,因为我得到的数据是“未定义”
抱歉更新晚了,我通过在客户端使用相同的放置请求解决了这个问题,因为放置请求不需要 Vimeo 访问令牌,所以您可以使用我上面提到的相同放置请求,并且从 header 中删除身份验证,如下所示
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData();
formData.append('selectedFile', new Blob([selectedFile], { type: 'image/jpg, image/png' }));
// formData.append('uploadLink', uploadLink);
const headers = {
'Content-Type': 'image/jpg, image/png',
Accept: 'application/vnd.vimeo.*+json;version=3.4',
};
try {
axios
.put(`${uploadLink}`, formData, {
headers,
})
.then((response) => {
console.log(`${uploadLink}link for upload`);
});
} catch (error) {
console.log(error);
}
};
我想将缩略图上传到 viemo api ,并且基于 Vimeo 文档,我必须在请求正文中将缩略图文件作为二进制数据包含在内,我必须从客户端上传缩略图“ fontend”并将发送来自 rest-api“后端”的请求问题是我的 rest-api 无法接收二进制数据,因为我正在使用 express.js,有没有办法在后端处理二进制数据。
步骤如下:
客户端发送缩略图数据=>后端通过请求体接收数据并发送到=>端点
客户端请求
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData();
formData.append('selectedFile', new Blob([selectedFile], { type: 'application/json' }));
formData.append('uploadLink', uploadLink);
const headers = {
'Content-Type': 'application/json',
Accept: 'application/vnd.vimeo.*+json;version=3.4',
};
try {
axios
.post(`${backendPostPath}/thumbnail-upload`, formData, {
headers,
})
.then((response) => {
applyThumbnial();
console.log(`${uploadLink}link for upload`);
});
} catch (error) {
console.log(error);
}
};
后端请求无法接收前端请求的正文post作为二进制数据,
const ThumbnailUpload = async (req, res) => {
const { uploadLink } = req.body;
const { selectedFile } = req.body;
console.log(uploadLink);
const clientServerOptions = {
uri: `${uploadLink}`,
encoding: null,
body: JSON.stringify({
name: uploadLink,
file: selectedFile,
}),
method: 'PUT',
headers: {
'Content-Type': 'application/json',
Accept: 'application/vnd.vimeo.*+json;version=3.4',
Authorization: getVimeoAuthorization(),
},
};
request(clientServerOptions, function (error, response) {
if (error) {
res.send(error);
} else {
const body = JSON.parse(response.body);
res.send(body);
}
});
};
有没有办法让后端请求主体获取二进制数据,因为我得到的数据是“未定义”
抱歉更新晚了,我通过在客户端使用相同的放置请求解决了这个问题,因为放置请求不需要 Vimeo 访问令牌,所以您可以使用我上面提到的相同放置请求,并且从 header 中删除身份验证,如下所示
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData();
formData.append('selectedFile', new Blob([selectedFile], { type: 'image/jpg, image/png' }));
// formData.append('uploadLink', uploadLink);
const headers = {
'Content-Type': 'image/jpg, image/png',
Accept: 'application/vnd.vimeo.*+json;version=3.4',
};
try {
axios
.put(`${uploadLink}`, formData, {
headers,
})
.then((response) => {
console.log(`${uploadLink}link for upload`);
});
} catch (error) {
console.log(error);
}
};