gpt4 book ai didi

node.js - 从请求文件中获取二进制数据 Express JS

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:22 24 4
gpt4 key购买 nike

我在客户端中有一个用于上传文件的表单

<form method="post" action="/">
<input type="file"/>
</form>

如何使用nodeJS和Express在服务器中读取该文件的数据内容和二进制数据内容?像这样...

app.get('/',(req, res) => {
//handle data content
//handle binary data content
}

最佳答案

使用ExpressJS中间件,如multer .

注意:以下示例不适用于生产环境。 HTML 代码和express js 后端都没有采用任何类型的安全性。在生产环境中使用此示例将使您的系统甚至网络容易受到攻击。

另请注意:我假设您对 Express js 有一些非常基本的熟悉,包括如何创建简单的 GET 和 POST 路由。

假设我有一个包含简单 HTML 的页面,它允许人们将任何类型和大小的任何文件上传到我的网站:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload file to ExpressJS backend</title>
</head>
<body>
<form enctype="multipart/form-data" action="/do-upload" method="post">
<input type="file" name="file_from_user"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>

<form ...>指定它将上传 multipart/form-data有效负载到我的/do-upload端点的形式为 POST http 请求。所以,在我的服务器上我需要...

  1. 指定/do-upload端点。
  2. 允许 /do-upload接受端点 POST http 请求。
  3. 允许 /do-upload接受端点 multipart/form-data .

使用普通的旧式 Express js 路由很容易解决第 1 项和第 2 项。

如果我们仅限于 Express js,那么困难的部分是第 3 项。值得庆幸的是,我们没有受到限制,因此我们将使用 multer 中间件。 Multer 自动知道如何获取多部分表单数据并从中解密文件上传(如何通过多部分表单数据请求上传文件的确切机制是我留给读者的一个挑战)。

我们将创建 /do-upload路由,将 multer 中间件实例注入(inject)其中,然后在有人尝试上传文件时执行某些操作。代码如下:

var express = require('express'),
multer = require('multer'),

// Set up the middleware, which automatically handles files uploaded to it.
// The "dest" property specifies the location to save uploaded files.
// You will need to make sure this directory exists.
upload_middleware = multer({dest: 'tmp/uploads/'}),

app = express(),

// This is the name of the <input> element from the HTML that will
// send the file to the server.
form_element_name = 'file_from_user';

// The second parameter is how one injects middleware into a route in express js.
app.post('/do-upload', upload_middleware.single(form_element_name), function (request, response) {
console.log('Got a file!');

// The multer middleware adds the "file" property
// to the request object. The file property contains useful
// information about the file that was uploaded.

console.log('The original filename was: "%s".', request.file.originalname);
console.log('I saved the file to: %s.', request.file.path);
console.log('The file is %s bytes in size.', request.file.size);

// Finish the request with an HTTP 200 code and an informative message, so we don't leave user
// hanging in his or her browser.
response
.status(200)
.send('File uploaded successfully!');
});

// ... other routes
// ... app.listen call that starts your server

让 Express js 轻松接受单个文件上传,然后将悲伤上传存储在目录中的某个位置,真的就是这么简单。不过,正如我所说,这还没有准备好投入生产。它需要安全性,我将这一点作为一项挑战留给您去解决。

来源和进一步阅读:

关于node.js - 从请求文件中获取二进制数据 Express JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com