😸
NodeJSでimgurに動画を匿名アップロードする
フロント側からmultipart/form-dataで動画ファイルを受け取り、
node-fetch
でimgur APIを叩いて匿名アップロードする処理です。
multer使うところとかFormData周り結構ハマったので備忘録。
import * as express from "express";
import fetch from "node-fetch";
import * as FormData from 'form-data';
interface MulterFile {
key: string;
path: string;
mimetype: string;
originalname: string;
size: number;
buffer: Buffer;
}
const multer = require("multer");
const upload = multer();
~~~
(中略)
this.router.post("/", upload.any(), this.post);
~~~
private async post(
req: express.Request & { files: MulterFile[] },
res: express.Response
) {
let formData = new FormData();
formData.append('video',req.files[0].buffer,req.files[0].originalname);
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "multipart/form-data",
},
body: formData,
};
delete requestOptions.headers['Content-Type'];
const response = await fetch(
"https://api.imgur.com/3/upload",
requestOptions
);
const result = await response.json();
result
にdeletehashや動画の掲載先が返ってくるのでDBなどに保存する。
あとはexpressやnginxのアップロードファイルサイズ上限の設定を忘れないようにしましょう。
特にnginxはCORS許可しているのにファイルサイズ上限が設定されていなかったためにCORSエラーを返してくるので注意しましょう。
Discussion