Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node/Multer |无法基于fieldname获取专用文件名_Javascript_Node.js_Node Modules_Multer - Fatal编程技术网

Javascript Node/Multer |无法基于fieldname获取专用文件名

Javascript Node/Multer |无法基于fieldname获取专用文件名,javascript,node.js,node-modules,multer,Javascript,Node.js,Node Modules,Multer,我与创建了一个Express应用程序,用于在Node.js应用程序中上载项目 我尝试做的是选择,比如: Upload 1 - that has a fieldname of upfile1 Upload 2 - that has a fieldname of upfile2 Upload 3 - that has a fieldname of upfile3 基本上,我需要分别选择我的多上传应用程序的每个上传文件名项目。每次上传都需要在应用程序中针对不同的任务进行不同的处理。以console.

我与创建了一个Express应用程序,用于在Node.js应用程序中上载项目

我尝试做的是选择,比如:

Upload 1 - that has a fieldname of upfile1
Upload 2 - that has a fieldname of upfile2
Upload 3 - that has a fieldname of upfile3
基本上,我需要分别选择我的多上传应用程序的每个上传文件名项目。每次上传都需要在应用程序中针对不同的任务进行不同的处理。以console.log为例,我需要执行以下操作:

console.log(req.body.upfile1.filename);
console.log(req.body.upfile2.filename);
console.log(req.body.upfile3.filename);
使用“我的视图”中使用“名称”属性定义的不同字段名选择应用程序中处理的不同项目

下面是我的代码

视图[index.html]


非常感谢您的帮助,谢谢

标记中的输入元素必须包装在表单中,它们可能已经包装在表单元素中,但没有显示在问题中。您还应该设置窗体的


req.body.upfile1和not req.files上的文件名。在index.html上使用一个表单,同时也不要忘记enctype=multipart/form data我的表单已经在使用了,只是我的问题中没有写它。我现在也尝试了你的建议,使用req.body.upfile1和console.logupfile是:+req.files.upfile;但它显示的upfile是:控制台中未定义我现在更新了我的问题,并包含了我的表单操作谢谢,您的代码显示了所有带有上载文件名的字段名,但我以后如何在我的代码中单独选择它们,如console.logupfile2文件是:+req.body.upfile2.filename;要获取本例中每个选定字段名的文件名,请分别使用upfile2,以便以后将每个字段名上载连接到我的应用程序中的不同任务?我不知道如何像在console.log示例中那样单独选择它们。@Cody我修改了答案并添加了一个名为findFileByFieldname的函数,该函数获取多个文件对象的数组和字段名,并在传递的文件数组中查找具有指定字段名的文件对象。我还修改了路由处理程序,将文件名存储到3个不同的变量中。希望能有帮助。非常感谢!我喜欢你的解决方案,你真的帮助了我,我非常感谢你的帮助!只是一个小问题,若我用你们的代码上传多个文件,只是console.log中第一个被识别的文件,你们能不能提供一种方法,只在可能的情况下使用你们的代码对每个字段名进行多次上传?我的意思是,若upfile1在文件中包含两个文件,只上传第一个被识别的文件?我想问你们是否可以提供一种方法,它可以为每个fieldname上载识别多个文件。我开始使用HTML多属性,希望为每个fieldname上载多个文件,但它只识别上载的第一个文件。希望你明白我的意思,也能帮上忙。再次感谢。
<form id="app-form" method="POST" class="fileupload" method="post" action="app" enctype="multipart/form-data">
<h1>Multi File Uploads</h1>
<input type="file" name="upfile1" value="">
<input type="file" name="upfile2" value="">
<input type="file" name="upfile3" value="">
<input type="submit" />
</form>
app.get("/", function(req, res) {
  res.sendFile(__dirname + "/index.html");
});

app.post("/app", upload.any(), function(req, res) {
 let files = req.files;
 files.forEach(file => {
   console.log(file.filename);
});
 res.send(req.files);
 res.end();
});
<form method="post" enctype="multipart/form-data" action="/upload">
    <input type="file" name="upfile1">
    <input type="file" name="upfile2">
    <input type="file" name="upfile3">

    <input type="submit" value="Submit">
</form>
const upload = multer({
  dest: path.join(__dirname, './upload') // You might want to change this according to your preferences
  // Since you're using any(), you might want to set fileFilter to control which files should be uploaded. See: https://github.com/expressjs/multer#filefilter
});

const findFileByFieldname = (files, fieldname) => {
  return files.find(file => file.fieldname === fieldname) || {};
}

app.post("/upload", upload.any(), (req, res) => {     
  const upfile1Filename = findFileByFieldname(req.files, 'upfile1').filename;
  const upfile2Filename = findFileByFieldname(req.files, 'upfile2').filename;
  const upfile3Filename = findFileByFieldname(req.files, 'upfile3').filename;

  res.json({
    upfile1Filename,
    upfile2Filename,
    upfile3Filename,
  });
});

// Example response (Node v8.11.4, Express v4.16.3, Multer v1.3.1)
// {"upfile1Filename":"360726b532a01b0e31832f067b5922c8","upfile2Filename":"144e1298437afb51f36eb37c77814650","upfile3Filename":"4c908da20e770130377e4006db945af6"}