用于上传视频的 Vimeo api 节点返回错误“源对象在此环境中可能仅是 Buffer 或 Readable 的实例”

问题描述

在 cd 一切之前,我会丢弃可能的错误点:

1 - 我的账户是 Premium 并且有权通过 api 上传视频:

enter image description here

2 - 我尝试使用其他文件格式,例如 blob,但我收到另一个错误,基本上是说无法找到文件的位置;

我正在尝试通过表单获取文件,并通过 Node 中的 vimeo-api 将其发送给 vimeo;

无论如何,这是我的代码的实现:

前端调用我的端点:

    const startUploadFinal = () => {
    const formData = new FormData();
    formData.append('video_file',currentFile);

    localhost.post('vimeo/blob',formData,{
      headers: {
        'Content-type': 'multipart/form-data',access_token: `voitto-token ${localStorage.getItem('oauth_token')}`
      }
    });
   };

我端点的路由器:

import { Router } from 'express';
import Vimeo from '../../app/controller/vimeoController';
import AuthMiddleware from '../../app/middleware/auth';
import upload from '../../config/multerConfig';

const routes = new Router();

routes.post(
  '/vimeo',upload.single('video_file'),AuthMiddleware,Vimeo.upload
);

export default routes;

使用多路复用上传配置:

import multer from 'multer';

const storage = multer.memoryStorage();
const upload = multer({ storage });

module.exports = upload;

我的端点:

async upload(req,res) {
 const client = new Vimeo(client_id,client_secret,fixedToken);
 console.log('File:',req.file);
 console.log('Size file:',req.file.size);
 client.upload(
  req.file,{
    name: 'Testing',description: 'Tescription Testing','upload.size': req.file.size,'upload.approach': 'tus',},function (uri) {
    console.log('File upload completed. Your Vimeo URI is:',uri);
  },function (bytesuploaded,bytesTotal) {
    const percentage = ((bytesuploaded / bytesTotal) * 100).toFixed(2);
    console.log(bytesuploaded,bytesTotal,`${percentage}%`);
  },function (error) {
    console.log(`${error}`);
  }
 );
}

在端点打印数据和最终错误

enter image description here

任何人都可以帮助我解决我做错的事情吗?

解决方法

当源代码仅允许缓冲区时,您尝试上传对象,缓冲区是仅以二进制格式编写的照片/视频,以便计算机更容易阅读。

简单修复:

client.upload(
    req.file.buffer,...
}

完整示例:

async function upload(req,res) {
   const client = new Vimeo(client_id,client_secret,fixedToken);
   console.log('File:',req.file);
   console.log('Size file:',req.file.size);
   client.upload(
       req.file.buffer,{
           name: 'Testing',description: 'Tescription Testing','upload.size': req.file.size,'upload.approach': 'tus',},function (uri) {
           console.log('File upload completed. Your Vimeo URI is:',uri);
       },function (bytesUploaded,bytesTotal) {
           const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
           console.log(bytesUploaded,bytesTotal,`${percentage}%`);
       },function (error) {
           console.log(`${error}`);
       }
    );
}