我正在尝试使用 Axios 将视频上传到带有 Node.js 的兔子流 API,但它不起作用。我应用相同的逻辑来获取、删除视频,它也适用于更改名称和更改分辨率,上传时我收到 400 个回复。在兔子流仪表板中,每次我发送请求时都会创建视频,但之后视频上传失败。请帮忙解决这个问题。
后端代码:
const upload = multer();
VideoRouter.post("/upload", upload.single("video"), uploadVideo);
export const uploadVideo = async (req, res) => {
// console.log(req.body, req.file);
const optionsToCreateVideo = {
method: "POST",
url: `http://video.bunnycdn.com/library/${process.env.VIDEO_LIBRARY_ID}/videos`,
headers: {
Accept: "application/json",
"Content-Type": "application/json",
AccessKey: process.env.BUNNY_API_KEY,
},
data: JSON.stringify({ title: req.body.name }),
};
await axios
.request(optionsToCreateVideo)
.then((response) => {
const video_id = response.data.guid;
axios
.put(
`http://video.bunnycdn.com/library/${process.env.VIDEO_LIBRARY_ID}/videos/${video_id}`,
{
headers: {
AccessKey: process.env.BUNNY_API_KEY,
},
body: req.file ,
}
)
.then(function (response) {
res.status(200).json(response);
})
.catch(function (error) {
// console.error("error", error);
res.status(400).json(error);
});
})
.catch((error) => {
console.log(error.message);
res.status(200).json({ error: "failed!" });
});
};
处理视频上传的前端代码:
const handleVideoChange = (e) => {
setVideo(e.target.files[0]);
};
const handleSubmit = () => {
if (!videoName || videoName.trim().length === 0) {
alert("Video Name is missing !");
return;
}
if (!video) {
alert("Video is missing !");
return;
}
const form = new FormData();
form.append("name", videoName);
form.append("video", video);
const config = {
onUploadProgress: (progressEvent) => {
const { loaded, total } = progressEvent;
let percentage = Math.floor((loaded / total) * 100);
console.log(percentage);
setProgress(loaded);
},
};
axios
.post("http://localhost:4000/video/upload", form, config)
.then((res) => console.log(res))
.catch((err) => console.error(err));
};
最佳答案
不要像数组或对象一样直接发送文件,而是使用 CreateReadStream 将其作为 RAW Binary 发送:
const buffer = fs.createReadStream('path-to-file');
放入 axios 的第二个参数是“body”,您必须直接将 RAW 二进制文件附加到它。
将后端代码中的 Axios 调用修改为:
axios.put(http://video.bunnycdn.com/library/${process.env.VIDEO_LIBRARY_ID}/videos/${video_id}`,
buffer,
{
headers: {
AccessKey: process.env.BUNNY_API_KEY,
},
}
)
希望它对您有帮助,我花了好几个小时才找出问题所在。
关于javascript - 无法使用 Node js将视频上传到bunny流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70504595/