我无法通过 api 以编程方式将视频上传到 dailymotion。我可以在前端手动上传。作为一个更大项目的一部分,我想通过 api 自动上传某些文件到 dailymotion,但我似乎无法让它发布视频。我尝试过的所有内容都表示它已上传,但我永远无法在前端或网站中看到视频,因此我无法查看它们或将它们嵌入到其他地方。我目前正在尝试从本地环境上传单个测试视频,与项目位于同一文件夹中以进行测试。
这就是我的结局:
app.post('/api/dailymotion/upload', async (req, res) =\> {
const localVideoDirectory = path.join(\__dirname, 'videos');
try {
const videos = fs.readdirSync(localVideoDirectory)
.filter(file => file.endsWith('.mp4') || file.endsWith('.mkv') || file.endsWith('.avi'))
.map(file => ({
name: file,
path: path.join(localVideoDirectory, file)
}));
if (!videos || videos.length === 0) {
return res.status(400).send('No video files found in the local directory.');
}
console.log('[📂] Found Local Videos:', videos);
const token = await getAccessToken();
const uploadResults = await Promise.all(videos.map(async (video) => {
try {
console.log(`[📂] Preparing to upload video: ${video.name}`);
const videoData = fs.readFileSync(video.path);
const form = new FormData();
form.append('file', videoData, video.name);
form.append('title', video.name);
form.append('channel', 'music');
form.append('published', 'true');
form.append('is_created_for_kids', 'false');
// Make the request to upload and publish in one step
const uploadResponse = await axios.post(
`${DAILY_API_BASE}/me/videos`,
form,
{
headers: {
Authorization: `Bearer ${token}`,
...form.getHeaders(),
},
maxContentLength: Infinity,
maxBodyLength: Infinity,
}
);
console.log('[✅] Video Uploaded and Published:', uploadResponse.data);
return uploadResponse.data;
} catch (error) {
console.error(`[❌] Error uploading video (${video.name}):`, error.message);
return { error: error.message, video: video.name };
}
}));
res.json(uploadResults);
} catch (error) {
console.error('[❌] Error in upload endpoint:', error.message);
res.status(500).send('Error uploading videos.');
}
});
我希望这能起作用,因为我尝试遵循文档并使用 api explorer。
使用 api explorer 成功后会返回一个简单的 json 对象。我得到同样的回报:
[✅] Video Uploaded and Published: {
id: 'x9cqoek',
title: 'anpr.mp4',
channel: 'music',
owner: 'x369ws4'
}
当我这样查询视频时:
curl -X GET -H "Authorization: Bearer <AUTH_TOKEN>" https://api.dailymotion.com/video/x9cqoek?fields=id,title,channel,status,published
它返回这个:
{"id":"x9cqoek","title":"anpr.mp4","channel":"music","status":"processing","published":false}
当我用这个检查编码进度时:
curl -X GET -H "Authorization: Bearer \<AUTH_TOKEN\>" https://api.dailymotion.com/video/x9cqoek?fields=encoding_progress
它返回这个:
{"encoding_progress":0}
最后,我尝试使用 API 手动将其设置为发布:
curl -X POST -H "Authorization: Bearer \<AUTH_TOKEN\>" -F 'published=true' https://api.dailymotion.com/video/x9cqoek
这只是返回这个:
{"id":"x9cqoek","title":"anpr.mp4","channel":"music","owner":"x369ws4"}
使用上述命令重新检查以确定状态返回与之前相同的对象。
目前我已经尝试了所有我能想到的方法,可能还会尝试其他方法,但如果可能的话,我想坚持使用 dailymotion。手动上传视频效果很好,我可以使用相同的身份验证令牌来查询我上传的视频并返回我通过网站手动上传的视频。我通过 API 上传的视频似乎从未传播过。
我认为你的API调用不正确,这是关于视频上传的文档,https://developers.dailymotion.com/guides/upload/,你应该首先将你的视频上传到服务器才能有视频url 在响应中,然后使用您从之前上传 reauest 中获取的 url 创建一个视频对象。