【发布时间】:2021-08-23 13:43:39
【问题描述】:
我用multer成功上传图片,保存在本地目录,保存到数据库的路径。但是由于heroku不会将图像保存在本地目录中,我必须将图像上传到Cloudinary,但Cloudinary需要将文件转换为base64。
这是 node.js 中的实现:
const path = require("path");
const DataUri = require("datauri");
const dUri = new DataUri();
exports.dataUri = (file: Express.Multer.File): string =>
dUri.format(path.extname(file.originalname).toString(), file.buffer);
我尝试在 typescript 中这样实现:
import path from "path";
import DataUri from "datauri";
// here is cauinsg issue
const dUri = new DataUri();
export const dataUri = (file: Express.Multer.File): string =>
dUri.format(path.extname(file.originalname).toString(), file.buffer);
在打字稿实现中,我收到const dUri = new DataUri() 的打字稿错误:
(alias) function DataUri(fileName: string, handler?: DataURI.Callback | undefined): Promise<string | undefined>
Expected 1-2 arguments, but got 0.ts(2554)
index.d.ts(2, 31): An argument for 'fileName' was not provided.
'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.
我不明白为什么 new DataUri() 可以在 olain 节点中工作,但不能在 typescript 中工作。我认为这将是 ts 文件错误,所以忽略了它,但它不起作用。当我启动应用程序时,我收到了这个错误:“UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received undefined"
我没有创建函数,而是尝试在控制器中实现这样的:
const image = req.file;
const file64=new DataUri(image.buffer)
这也没用
【问题讨论】:
-
为什么一定要用base64?这种方式开销很大。
-
Clodinary 接受 base64 格式
-
Cloudinary 也接受正确的二进制数据:cloudinary.com/documentation/image_upload_api_reference 在您看到他们需要 base64 的地方显示文档?那太疯狂了。
标签: node.js typescript multer cloudinary data-uri