繁体   English   中英

当我将 formData 放入具有其他属性的 object 并将其发布到服务器时,为什么我的 File 类型的对象数组未定义?

[英]Why is my array of objects of type File undefined when I put formData in a object with other properties and post it to the server?

我可以使用以下代码将文件上传到服务器:

服务组件.ts


  uploadFiles(){
    console.log("uploadFiles() in Service");
      const formData: FormData = new FormData();
      for(let i = 0; i<this.files_to_upload.length; i++){
      formData.append('files', this.files_to_upload.item(i));
  }

       return this.http.post(`${this.basicUrl}/post/file`, formData).subscribe(
         res => console.log(res)
       )
      
  }

在快递:

app.post('/post/file', (req,res)=>{
    console.log("post/file");
    console.log(req.body.files)
    if(req.files){
        console.log(req.files);
        let files = req.files.files;
        if(files.length > 1){
        for(let i=0; i<files.length; i++){
        let filename = files[i].name
        files[i].mv(__dirname + '/uploads/' + filename, function(err){
            if(err){
                console.log(err);
            } else {
                console.log("Uploaded")
            } 
        })
    }   
  }
}

这将完美地工作。

但现在我想在我的服务中扩展 function 以便我可以导航到路径并将这些文件上传到正确的文件夹中。

uploadFiles(path){
    console.log("uploadFiles() in Service");
      const formData: FormData = new FormData();
      for(let i = 0; i<this.files_to_upload.length; i++){
      formData.append('files', this.files_to_upload.item(i));
  }

       return this.http.post(`${this.basicUrl}/post/file`, {files: formData, path: path}).subscribe(
         res => console.log(res)
       )
      
  }

但是后来不知何故我无法访问这些文件。 如果我在 Express 中执行以下操作:


app.post('/post/file', (req,res)=>{
    console.log("post/file");
    console.log(req.body) 
    ...

正文有属性filespath ,但files是空的 object... 扩展 object 发送到服务器时如何访问文件?

发送文件时,应使用multipart/form-data方法对正文进行编码。
您正在发送Json object (尽管它具有多部分属性),因此正文将使用application/json方法进行编码,这就是您无法访问上传文件的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM