代码之家  ›  专栏  ›  技术社区  ›  Tirthraj Barot

在Angular 4 http请求中,表单数据似乎是请求负载中的其他内容

  •  1
  • Tirthraj Barot  · 技术社区  · 7 年前

    我正试图将一个文件上传到服务器,所以我所做的是将我的数据json转换为formData,将文件附加到其中,然后发送到一个请求。我在 requesPayload 不是JSON,而是其他东西。

    这是 组成部分

    doSubmit(data){
     const fd = new FormData();
        fd.append('name','Tirthraj');
        fd.append('file',this.myFile);
    
        for (var key in data) {
          if (data.hasOwnProperty(key)) {
            fd.append(key,data[key])
            console.log(key + " -> " + data[key]);
          }
        }
    
        this.myService.doUploadDataWithFile(fd).then();
    }
    

    这是 服务 功能:

     doUploadDataWithFile(data): Promise<any> {
        let headers = new Headers();
        // headers.append('Content-Type', 'multipart/form-data');
        headers.append('Content-Type', 'undefined');
        let options = new RequestOptions({ headers: headers });
        console.log("ADDElearning  DATA", data);
        return this.http.post("SERVER_API", data, options).toPromise();
      }
    

    以下是请求负载:

    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="name"
    
    Tirthraj
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="file"; filename="524347_335264113233857_1091003137_n.jpg"
    Content-Type: image/jpeg
    
    
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="module_title"
    
    312
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="module_synopsis"
    
    123
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="estimated_time"
    
    321
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="module_type"
    
    scorm12
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="article_title"
    
    123312
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4
    Content-Disposition: form-data; name="article_description"
    
    321
    ------WebKitFormBoundary5Ga9J56YQxt16Ey4--
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   Himesh Suthar    7 年前

    正如您所提到的,您希望将文件与表单数据一起发送,您所做的事情绝对正确。唯一缺少的是在php中访问该文件的正确方法。发送表单数据时。这意味着您正在发送带有该输入字段名称的整个表单。

    所以你可以像

    echo $_POST['module_title'];
    var_dump($_FILES['file']);
    var_dump($_FILES['file1'])
    $filename = $_FILES['file']['name'];
    move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'.$filename);
    
        2
  •  1
  •   guest271314    7 年前

    发布 JSON 代表 <form> 这个 File 对象需要转换为 data URI ; JSON 是一个字符串。

    const props = {};
    const reader = new FileReader;
    reader.onload = () => {
      props["file"] = reader.result;
    }
    
    for (let [key, prop] of new FormData(form)) {
      if (!prop instance of File) {
        props[key] = prop;
      } else {
        reader.readAsDataURL(prop);
      }
    }
    
    const json = JSON.stringify(props);