所以我一直在研究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中间件一样。
答案 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'错误有关。