以下是“又拍云 Node.js 实现文件上传、删除功能”的完整攻略:
准备工作
首先,你需要拥有一个又拍云的账号,并开通相应的存储服务。然后,在本地电脑上安装Node.js,使用npm包管理器安装以下的依赖库:
npm install upyun
npm install formidable
其中,upyun
是用于操作又拍云存储服务的SDK,formidable
是用于处理上传文件的模块。接下来,进入具体实现的步骤。
文件上传功能实现
首先,需要在代码中引入相关的库,并声明又拍云存储的账号、密码等相关信息。代码如下:
const Upyun = require('upyun');
const formidable = require('formidable');
const bucketName = 'your_bucket';
const operatorName = 'your_operator_name';
const operatorPwd = 'your_operator_password';
const upyun = new Upyun({
bucket: bucketName,
operator: operatorName,
password: operatorPwd
});
接下来,可以定义一个上传文件的路由,当服务器接收到文件上传的请求时,使用formidable
模块解析上传的文件,并将其上传到又拍云存储。代码如下:
app.post('/upload', function(req, res) {
const form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
if (err) {
console.error(err.message);
return res.status(500).send('Internal server error');
}
const { path, name } = files.file;
const remotePath = '/uploads/' + name;
const uploadStream = upyun.putFile(remotePath);
fs.createReadStream(path).pipe(uploadStream);
uploadStream.on('error', function(error) {
console.error('Upload error', error);
res.status(500).send('Upload error');
});
uploadStream.on('finish', function() {
console.log('Upload complete', remotePath);
res.status(200).send('Upload complete');
});
});
});
该路由使用formidable
模块的parse
方法解析上传的表单数据,其中包括文件的信息。解析完成后,获取到文件的本地路径和文件名,然后指定了一个在又拍云中的远程路径。接下来,创建一个上传流,将本地文件流通过pipe
方法连接到上传流中,即可完成文件的上传操作。上传完成后,根据上传结果将相应的响应返回给客户端。
文件删除功能实现
与上传功能类似,也需要在代码中引入相关的库,并声明又拍云存储的账号、密码等相关信息。代码如下:
const Upyun = require('upyun');
const bucketName = 'your_bucket';
const operatorName = 'your_operator_name';
const operatorPwd = 'your_operator_password';
const upyun = new Upyun({
bucket: bucketName,
operator: operatorName,
password: operatorPwd
});
接下来,可以定义一个删除文件的路由,当服务器接收到删除文件的请求时,使用upyun
的deleteFile
方法删除指定路径下的文件。代码如下:
app.delete('/delete/:filename', function(req, res) {
const remotePath = '/uploads/' + req.params.filename;
upyun.deleteFile(remotePath, function(err, result) {
if (err) {
console.error(err.message);
return res.status(500).send('Internal server error');
}
console.log('Delete complete', remotePath);
res.status(200).send('Delete complete');
});
});
该路由使用了express.js
框架的DELETE方法,并指定了需要删除的文件名。然后,使用upyun
的deleteFile
方法删除指定路径下的文件。删除完成后,根据删除结果将相应的响应返回给客户端。
示例说明
示例1:上传文件
客户端发起请求:
const formData = new FormData();
formData.append('file', file);
axios.post('/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
timeout: 10000
})
.then(function(res) {
console.log(res.data);
})
.catch(function(err) {
console.error(err);
});
该请求使用了axios
库,将文件数据放在表单数据中,并使用post方法发送到服务器上。
服务端返回响应:
Upload complete /uploads/filename.png
该响应表明文件上传成功,上传后存储在了远程路径/uploads/filename.png
中。
示例2:删除文件
客户端发起请求:
axios.delete('/delete/filename.png')
.then(function(res) {
console.log(res.data);
})
.catch(function(err) {
console.error(err);
});
该请求使用了axios
库,指定了要删除的文件名,并通过delete方法发送到服务器上。
服务端返回响应:
Delete complete /uploads/filename.png
该响应表明文件删除成功,该文件已经从远程路径/uploads/filename.png
中被删除。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:又拍云 Node.js 实现文件上传、删除功能 - Python技术站