下面我会给出一个使用Node.js实现文件上传、重命名以及移动位置的示例代码,并讲解具体步骤。
环境准备
在开始之前,我们需要确保计算机上已经安装了Node.js。同时需要安装以下两个Node.js模块:
formidable
:用于处理文件上传;fs
:用于处理文件操作。
可以通过以下命令进行安装:
npm install formidable fs
文件上传
下面来看具体的代码。首先我们需要创建一个Node.js脚本文件,例如 upload.js
,并导入 formidable
和 http
模块:
const http = require('http');
const formidable = require('formidable');
然后,我们创建一个服务器,并监听一个POST请求,处理文件上传:
http.createServer((req, res) => {
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while uploading file.');
return;
}
// 文件上传成功
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('File uploaded successfully.');
});
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Invalid request');
}
})
在上述代码中,我们使用了 formidable
模块的 form.parse()
方法解析请求。该方法将会把上传的文件信息解析后储存在 files
参数中。
文件重命名以及移动
文件上传成功后,我们可以在上传文件时进行文件重命名,并移动文件到特定位置。我们可以使用 fs
模块的 fs.rename()
方法来完成这一操作。
下面是完整的代码:
const http = require('http');
const formidable = require('formidable');
const fs = require('fs');
http.createServer((req, res) => {
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while uploading file.');
return;
}
const uploadedFile = files.uploadFile;
// 重命名文件
const fileNewName = Date.now() + '_' + uploadedFile.name;
const fileNewPath = __dirname + '/uploads/' + fileNewName;
fs.rename(uploadedFile.path, fileNewPath, (err) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while renaming file.');
return;
}
console.log(`File ${uploadedFile.name} uploaded and renamed to ${fileNewName}`);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('File uploaded successfully and renamed.');
});
});
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Invalid request');
}
}).listen(3000, () => {
console.log('Server started on port 3000');
});
在上述代码中,我们先使用 uploadedFile.name
应用了一个新文件名。然后我们使用 __dirname
获取当前脚本所在目录,并使用 /uploads/
拼接出新的文件路径,最后使用 fs.rename()
方法完成文件的重命名和移动。
示例说明
下面是两个示例,演示如何从本地上传文件,并在文件上传时对文件进行重命名、移动,并将上传成功的信息显示在网页上。
示例1
在示例1中,我们将在上传成功后把文件重命名为上传用户名+时间,并存储在 ./uploads/
文件夹中。
在文件上传后,在浏览器中输入 http://localhost:3000
即可打开页面进行文件上传。
const http = require('http');
const formidable = require('formidable');
const fs = require('fs');
http.createServer((req, res) => {
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while uploading file.');
return;
}
const uploadedFile = files.uploadFile;
// 获取上传用户名和文件后缀
const username = fields.username;
const fileExt = uploadedFile.name.split('.').pop();
// 重命名文件
const fileNewName = username + '_' + Date.now() + '.' + fileExt;
const fileNewPath = __dirname + '/uploads/' + fileNewName;
fs.rename(uploadedFile.path, fileNewPath, (err) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while renaming file.');
return;
}
console.log(`File ${uploadedFile.name} uploaded and renamed to ${fileNewName}`);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('File uploaded successfully and renamed.');
});
});
} else {
const html = `
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<h3>文件上传</h3>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="text" name="username" placeholder="请输入用户名"><br>
<input type="file" name="uploadFile" multiple="multiple"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
`;
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(html);
}
}).listen(3000, () => {
console.log('Server started on port 3000');
});
示例2
在示例2中,我们将在上传成功后把文件重命名为时间戳,并存储在 ./uploads/
文件夹中。上传成功后,将会在页面上显示上传成功信息和上传文件预览链接。
在文件上传后,在浏览器中输入 http://localhost:3000
即可打开页面进行文件上传。
const http = require('http');
const formidable = require('formidable');
const fs = require('fs');
http.createServer((req, res) => {
if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while uploading file.');
return;
}
const uploadedFile = files.uploadFile;
// 重命名文件
const fileNewName = Date.now() + '_' + uploadedFile.name;
const fileNewPath = __dirname + '/uploads/' + fileNewName;
fs.rename(uploadedFile.path, fileNewPath, (err) => {
if (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('Error occurred while renaming file.');
return;
}
console.log(`File ${uploadedFile.name} uploaded and renamed to ${fileNewName}`);
const html = `
<html>
<head>
<meta charset="utf-8">
<title>文件上传结果</title>
</head>
<body>
<h3>文件上传成功</h3>
<div>
<p>文件名:<a href="./uploads/${fileNewName}" target="_blank">${fileNewName}</a></p>
<p>文件大小:${uploadedFile.size}</p>
<p>文件类型:${uploadedFile.type}</p>
<p>预览链接:<a href="./uploads/${fileNewName}" target="_blank">${uploadedFile.name}</a></p>
</div>
</body>
</html>
`;
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(html);
});
});
} else {
const html = `
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<h3>文件上传</h3>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile" multiple="multiple"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
`;
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(html);
}
}).listen(3000, () => {
console.log('Server started on port 3000');
});
以上就是使用Node.js实现文件上传、重命名以及移动位置的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js文件上传重命名以及移动位置的示例代码 - Python技术站