文件上传Angular 2&帆Js

时间:2017-03-06 19:01:38

标签: javascript angular file-upload sails.js

我正在尝试从Angular 2和Sails Js服务器上传多个文件。我想将文件放在SailJs App的公共文件夹中。

通过从触发的事件中获取文件,从Angular 2 App上传文件。单个文件上传的代码如下:

Angular 2服务:

fileChange(event: any): Promise<string>  {
    let fileList: FileList = event.target.files;
    if(fileList.length > 0) {
        let file: File = fileList[0];
        let formData:FormData = new FormData();
        formData.append('myFile', file, file.name);
        let headers = new Headers();
        let cToken = this.cookie.getCookie("token");
        headers.append('Authorization', 'Bearer ' + cToken);
        headers.append('Content-Type', undefined);

        //headers.append('Content-Type', 'multipart/form-data');

        headers.append('Accept', 'application/json');
        let options: RequestOptionsArgs = { headers: headers, withCredentials: true }
        return new Promise((resolve, reject) => {
            this.http.post( this.apiEndpoint + "project/reffile/add/all", formData, options).toPromise()
            .then(response => {
                // The promise is resolved once the HTTP call is successful.
                let jsonData = response.json();
                if (jsonData.apiStatus == 1) {
                    resolve(jsonData);
                }
                else reject(jsonData.message);
            })
            // The promise is rejected if there is an error with the HTTP call.
            // if we don't get any answers the proxy/api will probably be down
            .catch(reason => reject(reason.statusText));
        });
    }
}

SailsJs方法:

  /**
   * `FileController.upload()`
   *
   * Upload file(s) to the server's disk.
   */
   addAll: function (req, res) {

    // e.g.
    // 0 => infinite
    // 240000 => 4 minutes (240,000 miliseconds)
    // etc.
    //
    // Node defaults to 2 minutes.
    res.setTimeout(0);

    console.log("req.param('filename')");
    console.log(req.param('filename'));
    req.file('myFile')
    .upload({

      // You can apply a file upload limit (in bytes)
      maxBytes: 1000000

    }, function whenDone(err, uploadedFiles) {
      if (err) return res.serverError(err);
      else return res.json({
        files: uploadedFiles,
        textParams: req.allParams()
      });
    });
  },

发布表单后,我在HTTP来电回复中无法获取文件,也无法console.log(req.param('filename'));

请帮助我,我在这里做错了什么。我也尝试过更改/删除标题,但仍然无效,

有些专家说HTTP目前无法上传文件,需要使用本机XHR请求。请查看Thierry Templier的回答here

1 个答案:

答案 0 :(得分:0)

尝试指定文件上传目录:

    req.file('file').upload({
        dirname: '../../assets/uploads'
    },function (err, files) {
        if (err) return res.serverError(err);
        var fileNameArray = files[0].fd.split("/");
        var fileName = fileNameArray[fileNameArray.length - 1];
        console.log("fileName: ",fileName);
    });

要访问上传的文件,您可以将fileName附加到您指定的上传目录。文件可以访问

相关问题