gpt4 book ai didi

javascript - 如何使用 Node.js Express 后端正确处理文件上传?

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:52 26 4
gpt4 key购买 nike

我决定使用 ng-flow , flow.js 的 Angular 实现在前端处理文件上传,然后我选择 multer 作为中间件来接收文件。

我为 multer 做了最简单的中间件设置:

app.use(multer({ dest: './temp_uploads/'}))

有一个 /POST upload 路由,我现在正在登录以控制接收到的内容:

app.route('/upload').post(function(request,response,next){

console.log(request.body)
console.log(request.files)
// Response code and stuff then ...
});

所以输出是:

{ flowChunkNumber: '1',
flowChunkSize: '1048576',
flowCurrentChunkSize: '1606857',
flowTotalSize: '1606857',
flowIdentifier: '1606857-IMG_20140807_153553jpg',
flowFilename: 'IMG_20140807_153553.jpg',
flowRelativePath: 'IMG_20140807_153553.jpg',
flowTotalChunks: '1' }
{ file:
{ fieldname: 'file',
originalname: 'blob',
name: 'c12d6f8d4950e48eee21b43f8ee4344a',
encoding: '7bit',
mimetype: 'application/octet-stream',
path: 'temp_uploads/c12d6f8d4950e48eee21b43f8ee4344a',
extension: '',
size: 1606857,
truncated: false,
buffer: null }}

实际上,所有内容都保存在我的服务器上,在 /temp_uploads 下,这是应该的。但是文件不会保留它们的名称,甚至不会保留扩展名。我想知道我应该如何配置它,甚至防止我的服务器出现问题。

为了以防万一,我会解释我想用这些文件做什么。收到后,我将它们存储到谷歌云存储平台。然后我会将这些文件作为附件邮寄,如果文件大于 15 MB,我会在邮件中包含一个下载链接。

flow.js 网站上,他们展示了这个用于在服务器上处理文件的 PHP 代码片段,但是由于我的 PHP 背景很差,所以翻译代码并不是一个可靠的选择我:

$config = new \Flow\Config();
$config->setTempDir('./chunks_temp_folder');
$file = new \Flow\File($config);

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if ($file->checkChunk()) {
header("HTTP/1.1 200 Ok");
} else {
header("HTTP/1.1 404 Not Found");
return ;
}
} else {
if ($file->validateChunk()) {
$file->saveChunk();
} else {
// error, invalid chunk upload request, retry
header("HTTP/1.1 400 Bad Request");
return ;
}
}
if ($file->validateFile() && $file->save('./final_file_name')) {
// File upload was completed
} else {
// This is not a final chunk, continue to upload
}

我想使代码更有效并实际完成可靠实现的工作,我应该如何改进它?

最佳答案

Actually everything is being saved at my server, under /temp_uploads as it's supposed to. But files won't keep their names and not even extension. I wonder what I should do to configure it all good and even prevent problems at my server.

您可以按照 multer README.md 中的示例来控制命名。我将其包含在下面:

app.use(multer({
dest: './uploads/',
rename: function (fieldname, filename) {
return filename.replace(/\W+/g, '-').toLowerCase() + Date.now()
}
}))

看起来还有很多其他的钩子(Hook)。

另见 cloud-storage模块。您可以使用它向 Google 推送数据。

abstract-blob-storegoogle-cloud-storage建立在其之上会更合适。它允许您将文件直接流式传输到 Google,而无需使用中间存储。

关于javascript - 如何使用 Node.js Express 后端正确处理文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452950/

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