【发布时间】:2019-03-15 13:51:20
【问题描述】:
我正在尝试执行基本的 Laravel 5 post 请求,只需执行以下操作:
- 将一些数据保存到数据库中
- 将
file(图像)存储到公共存储中,名称可能是“.jpg”后面的 20 个随机数的组合 - 保存一个 url(用于在
img标记中定位图像。我知道这不是最好的方法,所以请随时发布)
但是,当执行一个普通的post 请求时,没有从angular 6 到laravel 5 的特殊标头,由于某种原因,File 不断转换为empty 数组。 (下图是前后对比)
之前:
0: Object { id: 0, body: null, file: File }
之后:
0: Object { id: 0, body: null, file: [] }
File 已满,用于在提交之前在画布上创建预览,因此它可以工作。在 Laravel 中执行任何 php 代码之前,控制台会在发布和返回 $req Request 之前记录这些数据。
因此,翻译中唯一可能丢失的地方是介于两者之间。代码如下:
角度 6:
postToLaravel(object) {
console.log(object.message);
this.http.post(this.url + '/add/message', object).subscribe(res => {
console.log(res);
});
}
Laravel 5:
function addMessage(Request $req) {
return $req->messages;
empty 数组在注册为jpg 文件的名称下一直没有向storage 推送任何内容,但没有显示图像。
在上传图片的组件上,我们在 (change)="" 事件之后发生了以下块:
onFileSelected(e: any) {
this.sectedFile = e.target.files[0];
this.isImage = true;
this.messageService.addImage(this.id, this.sectedFile);
this.preview();
}
服务函数只是找到正确的对象并添加一个文件:
addImage(id, file) {
var index = this.data.findIndex(x => x['id'] == id);
this.data[index]['body'] = null;
this.data[index]['file'] = file;
}
当按下提交按钮时,它只会获取服务中的所有变量并将它们压缩成一个对象。这个对象包含messages,这是一个进一步的对象数组(对象如顶部所示)(如果有意义的话)
pushMessageToServer() {
this.messageService.postToLaravel({
title: this.title,
location: this.location,
gender: this.gender,
age: this.age,
deadline: this.deadline,
messages: this.data
});
}
这里有什么我遗漏的吗?
如果您需要任何额外信息,请告诉我。
【问题讨论】:
-
你的 javascript 部分是什么样子的,需要先修复
-
你能用那个代码更新你的答案,让它更具可读性
-
好吧,我对 Angular 不熟悉,但是您在上面粘贴的代码没有提交功能,您在哪里将数据发布(xhr)到服务器(Laravel)
-
我在最后提供了您要求的提交块。它基本上只是将所有局部变量编译成一个对象,并在一个 http post 请求中发布到 Laravel
-
好的,您可以在您的 javascript 承诺中控制台.log 发布的数据以及您的控制器方法中的
dd($req->all()),看看您是否获得了正确的数据?
标签: javascript php angular laravel laravel-5