node.js - 图像上传 - 如何获取正确格式的图像数据以供服务器端处理

标签 node.js reactjs dropzone.js

我正在使用sharp在服务器端处理图像和 react dropzone获取图像文件。当我从 dropzone 将文件发布到服务器时,我从 request.body 中获取了如下所示的 blob:

{预览:'blob:http%3A//127.0.0.1%3A3000/1451580a-b24f-478f-a9f7-338c0d790829'}

或者,在将数据发送到服务器之前,我可以使用 FileReader(或其他东西)对图像文件执行某些操作,而不是将其转换为 blob。

尖锐的镜头:

  • 包含 JPEG、PNG、WebP、GIF、SVG、TIFF 的缓冲区
  • 原始像素图像数据
  • 包含图像文件路径的字符串,支持大多数主要格式。

我如何使用我所拥有的来提供清晰的支持格式?

最佳答案

我建议尝试使用名为 Multer 的 Node.js 模块来帮助您访问服务器上的照片文件。

https://github.com/expressjs/multer

首先,在客户端上,您需要将文件附加到 FormData像这样的对象:

// obtain the file from your react dropzone and save it to this file variable
const file = dropzone.file // not sure how you do this with react dropzone
const data = new FormData()
data.append('photo', file)

然后您将将此 FormData 对象发送到您的服务器。在服务器上,您将在用于处理照片的路线上使用 Multer。

确保您 npm install multer,并在您的服务器或路由文件中需要它。如果您要发送单个文件,您将使用 multer 'single' 方法。如果您想做任何不同的事情,请查看 API 文档。

app.post('/photos', multer().single('photo'), controller.processPhoto);

在此示例路由中,您向/photos 发送 POST 请求,multer 正在查找 FormData 键为“photo”的文件并将其附加到请求对象。

然后,在这个组成的“controller.processPhoto”方法中,您将可以在 req.file 上将图像作为请求对象的属性进行访问。有了这个,您可以轻松访问许多有用的信息,包括听起来您需要的图像缓冲区 req.file.buffer 。 (还有模仿类型、原始名称等)

这应该足以让您开始。

关于node.js - 图像上传 - 如何获取正确格式的图像数据以供服务器端处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37222718/

相关文章:

Dropzone.js - 如果上传失败则删除预览文件

javascript - Dropzone.js 不再将多个 imgs 上传到 Android 上的网站

javascript - 将 HTML 文件上传到 AWS S3,然后提供它而不是下载

javascript - 如何将 azure 广告集成到使用 azure 中的 REST API 的 React Web 应用程序中

javascript - 如何更新或操作从父级加载到 iframe 中的内容?

reactjs - 在 react 应用程序中创建首次访问弹出窗口?

angular - DropzoneJS 上传后隐藏dropzone区域,如何取回?

ios - Passport-facebook-token 不断返回 401

javascript - Apache2 虚拟主机错误

javascript - 将 2 Node 进程连接到 fakeredis