Angular文件上传到Laravel。 No' Access-Control-Allow-Origin'标头出现在请求的资源

时间:2018-03-17 22:10:17

标签: angular laravel file http cors

所以我一直在研究Angular 5 - Laravel应用程序,其中Angular是前端而Laravel正在作为API工作。

到目前为止,该项目已经能够执行几乎所有的CRUD操作,但直到现在我还没有上传任何文件,这就是这个问题开始出现。

我从laravel得到以下错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

我已经在laravel中设置了CORS中间件,如下所示:

return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PATCH, DELETE, OPTIONS')
        ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, Accept');

上传文件的角度逻辑是这样的:

控制器:

addActivity(): void {
    let formData = new FormData();
    formData.append('name', this.newActivity.name);
    formData.append('turnedInDate', (new Date(this.newActivity.turnedInDate)).toUTCString());
    formData.append('file', this.newActivity.file, this.newActivity.fileName);

    this.isLoadingModal = true;

    this.activitiesService.create(formData, this.studentSelected.id, true)
      .finally(() => this.isLoading = false)
      .subscribe(
        response => {},
        (error: AppError) =>{ throw error; }
      );
  }

服务:

create(data: any, parentId?: number, appendHeaders?: boolean): Observable<any> {
    let options = null;

    if(appendHeaders) {
      let headers = new Headers();
      headers.append('Content-Type', 'multipart/form-data');
      options = new RequestOptions({ headers: headers });
    }

    return this.http.post(this.url + this.parentEndpoint + (parentId || '') + this.endpoint + this.token, data, options)
      .catch(this.handleError);
  }

这个和我放的任何其他标题都给了我提到的错误,特别是这个&#34; multipart / form-data&#34;给我以下错误:

Missing boundary in multipart/form-data POST data in Unknown on line 0

我尝试过不发送标题,&#34;接受:application / json&#34;标题,但似乎对于这种特殊情况,Laravel并不关心并返回错误,就像没有CORS中间件一样。

1 个答案:

答案 0 :(得分:0)

好吧,在Laravel我想打印$ request变量,看看服务器上是否收到了所有内容,如:

public function store(Request $request, $id) {
    print_r($request);
    echo $id;
}

我刚评论了print_r行,错误消失了。 id被正确回显,所以我将$ file变量设置为$ request-&gt; file('file);一切正常。

不确定打印$ request的内容与抛出'Access-Control-Allow-Origin'错误有关。