将文件从URL上载到另一台服务器



我正试图使用NodeJS Lambda函数将一个公共视频文件从Amazon S3上传到Dailymotion。AWS Lambda功能有存储限制:我无法在无服务器功能上本地下载整个视频文件,然后将其发送到Dailymotion。

我寻找了一种方法来读取零件上的文件,并通过HTTPS请求将其发送到Dailymotion,我发现urllib库似乎很有用!

要将视频文件上传到Dailymotion,您可以向UPLOAD_URL发送POST请求,该请求应使用另一个经过身份验证的请求生成:

curl -X POST 
-F 'file=@/path/to/your/video.mp4' 
'<UPLOAD_URL>'

文档页面中明确提到了这些步骤。

我需要的是一种通过Lambda函数将文件从https://cdn.example.com/videos/filename.mp4这样的URL流式传输到Dailymotion的方法。

任何有良好经验的人都可以提供一个如何做到这一点的明确例子。

我找到了一个使用requestform-data库的解决方案。只是:

  1. 创建了一个新表单
  2. 使用request将文件作为流附加到表单中
  3. 提交表格
  4. 等待上传结束,将callback连同响应一起发送回调用者

这是我的Lambda函数代码的工作副本:

import request from 'request';
import FormData from 'form-data';
export const handler = (event, context, callback) => {
const form = new FormData();
form.append('file', request('https://cdn.mysite.com/video.mp4'));
form.submit({
host: 'upload-XX.dcX.dailymotion.com',
path: '/upload?uuid=XXXXX&seal=XXXXX&extra=XXXXX'
}, (error, response) => {
if (error) throw error;
let body = '';
response.on('data', chunk => {body += chunk.toString()});
response.on('end', () => {callback(null, JSON.parse(body))});
response.resume();
});
};

更新

使用Nodejs的https本机模块而不是不推荐使用的request库的另一个解决方案:

import https from 'https';
import FormData from 'form-data';
export const handler = (event, context, callback) => {
const form = new FormData();
https.get('https://cdn.mysite.com/video.mp4', response => {
form.append('file', response);
form.submit(
{
host: 'upload-XX.dcX.dailymotion.com',
path: '/upload?uuid=XXXXX&seal=XXXXX&extra=XXXXX'
},
(error, response) => {
if (error) callback(error);
let body = '';
response.on('data', chunk => body += chunk.toString());
response.on('end', () => callback(null, JSON.parse(body)));
response.resume();
}
);
});
};

相关内容

  • 没有找到相关文章

最新更新