Angular 2文件上传?

标签 angular file-upload

我正在尝试在 Angular 2 中上传文件。正在尝试

let file:FileList = inputEl.files[0];
console.log(file);
    this.http.post(url, file)
         .map(res => {
              return  res.headers.get("content-type");
            })
            .catch(err => {
             return Observable.throw(err);
            })
            .subscribe((res) => { // <-- this function
                console.log(res)
            });

我现在可以看到 POST 调用。但我仍然无法看到该文件 上传发生,文件上传请求应该是什么样子。

最佳答案

您的 http 服务文件:

import { Injectable } from "@angular/core";
import { ActivatedRoute, Router } from '@angular/router';
import { Http, Headers, Response, Request, RequestMethod, URLSearchParams, RequestOptions } from "@angular/http";
import {Observable} from 'rxjs/Rx';
import { Constants } from './constants';
declare var $: any;

@Injectable()
export class HttpClient {
  requestUrl: string;
  responseData: any;
  handleError: any;

  constructor(private router: Router, 
  private http: Http, 
  private constants: Constants, 
  ) {
    this.http = http;
  }

  postWithFile (url: string, postData: any, files: File[]) {

    let headers = new Headers();
    let formData:FormData = new FormData();
    formData.append('files', files[0], files[0].name);
    // For multiple files
    // for (let i = 0; i < files.length; i++) {
    //     formData.append(`files[]`, files[i], files[i].name);
    // }

    if(postData !=="" && postData !== undefined && postData !==null){
      for (var property in postData) {
          if (postData.hasOwnProperty(property)) {
              formData.append(property, postData[property]);
          }
      }
    }
    var returnReponse = new Promise((resolve, reject) => {
      this.http.post(this.constants.root_dir + url, formData, {
        headers: headers
      }).subscribe(
          res => {
            this.responseData = res.json();
            resolve(this.responseData);
          },
          error => {
            this.router.navigate(['/login']);
            reject(error);
          }
      );
    });
    return returnReponse;
  }
}

调用您的函数(组件文件):

onChange(event) {
    let file = event.srcElement.files;
    let postData = {field1:"field1", field2:"field2"}; // Put your form data variable. This is only example.
    this._service.postWithFile(this.baseUrl + "add-update",postData,file).then(result => {
        console.log(result);
    });
}

您的 html 代码:

<input type="file" class="form-control" name="documents" (change)="onChange($event)" [(ngModel)]="stock.documents" #documents="ngModel">

您的服务器文件(如 PHP):

print_r($_FILES);

关于Angular 2文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191722/

相关文章:

r - 如何在 Shiny 中读取 csv 文件?

css - 用线将 child 连接到垫树中的 parent

node.js - 将带有 mp4 的字幕文件 (.VTT) 从 Node/Express 发送到 Angular

html - FlexBox 内容溢出(Angular)

file-upload - PhoneGap FileTransfer.upload 参数不再发布

HTML 输入类型 ="file"拖放在 Edge 和 IE11 中不起作用

angular - 如何在 typescript 和 Angular 中定义静态常量

angular - 在 Angular Testing 中注入(inject)位置

html - 上传前使用 md5 检查的多个文件上传

ruby - Sinatra,上传表单中的进度条