将文件发布到 MYSQL 时出错 - PHP-CRUD-API
GETTING ERROR POSTING FILE TO MYSQL - PHP-CRUD-API
我正在尝试使用 mevdschee 的 PHP-CRUD-API 上传图像。
我几乎什么都试过了。。
这些是我尝试过的服务功能,同时使用 FormData 或简单的 json.
service.ts
addMapIcon(mapIcon:mapIcon): Observable<string>{
let fd = new FormData;
fd.append('active', mapIcon.active?'1':'0');
fd.append('file',mapIcon.file);
fd.append('name',mapIcon.name);
return this.http.post<string>(this.iconApiUrl, fd);
..or even:
return this.http.post<string>(this.iconApiUrl, fd, {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Content-type':'multipart/form-data'
+ combination of others parameters
}));
}
addMapIcon(mapIcon:mapIcon): Observable<string>{
return this.http.post<string>(this.iconApiUrl, mapIcon, {
headers: new HttpHeaders({
'Content-Type': 'application/json',
}),
});
}
component.ts
onIconChange(e) {
const reader = new FileReader();
if(e.target.files && e.target.files.length) {
const [file] = e.target.files;
reader.readAsDataURL(file);
reader.onload = () => {
this.mapIcon.file = file; //(or even reader.result as string; as found in some example)
this.mapIcon.name = file.name;
this.mapIcon.active = true;
//this.icon.file = file;
/*this.uploadForm.patchValue({
imgSrc: reader.result
});*/
};
}
}
文件字段在 mysql 中定义为 mediumblob。
我得到的错误是“违反数据完整性”。
看不懂哪里出错了..
您能否使用 post 请求将图像 blob 成功发送到后端?如果没有试试这个:
addMapIcon(mapIcon:mapIcon): Observable<string>{
let fd = new FormData();
fd.append('active', mapIcon.active?'1':'0');
**fd.append('file',mapIcon.file, mapIcon.name);**
fd.append('name',mapIcon.name);
return this.http.post<string>(this.iconApiUrl, fd, {
headers: new HttpHeaders({
'Content-type':'multipart/form-data'
}));
}
“违反数据完整性”错误是由失败的约束引起的。这可能是:
- 失败的外键约束(引用的记录不存在)
- 缺少字段值(在没有默认值的字段上)
- 不允许的空值(该字段不可为空)
您可以启用调试模式('debug' => true
在配置中)并查看响应的 X-Exception-Message
HTTP header(使用浏览器开发人员工具的网络选项卡).它将包含问题的原因。
注意:我是 PHP-CRUD-API.
的作者“mevdschee”
我正在尝试使用 mevdschee 的 PHP-CRUD-API 上传图像。 我几乎什么都试过了。。 这些是我尝试过的服务功能,同时使用 FormData 或简单的 json.
service.ts
addMapIcon(mapIcon:mapIcon): Observable<string>{
let fd = new FormData;
fd.append('active', mapIcon.active?'1':'0');
fd.append('file',mapIcon.file);
fd.append('name',mapIcon.name);
return this.http.post<string>(this.iconApiUrl, fd);
..or even:
return this.http.post<string>(this.iconApiUrl, fd, {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Content-type':'multipart/form-data'
+ combination of others parameters
}));
}
addMapIcon(mapIcon:mapIcon): Observable<string>{
return this.http.post<string>(this.iconApiUrl, mapIcon, {
headers: new HttpHeaders({
'Content-Type': 'application/json',
}),
});
}
component.ts
onIconChange(e) {
const reader = new FileReader();
if(e.target.files && e.target.files.length) {
const [file] = e.target.files;
reader.readAsDataURL(file);
reader.onload = () => {
this.mapIcon.file = file; //(or even reader.result as string; as found in some example)
this.mapIcon.name = file.name;
this.mapIcon.active = true;
//this.icon.file = file;
/*this.uploadForm.patchValue({
imgSrc: reader.result
});*/
};
}
}
文件字段在 mysql 中定义为 mediumblob。
我得到的错误是“违反数据完整性”。
看不懂哪里出错了..
您能否使用 post 请求将图像 blob 成功发送到后端?如果没有试试这个:
addMapIcon(mapIcon:mapIcon): Observable<string>{
let fd = new FormData();
fd.append('active', mapIcon.active?'1':'0');
**fd.append('file',mapIcon.file, mapIcon.name);**
fd.append('name',mapIcon.name);
return this.http.post<string>(this.iconApiUrl, fd, {
headers: new HttpHeaders({
'Content-type':'multipart/form-data'
}));
}
“违反数据完整性”错误是由失败的约束引起的。这可能是:
- 失败的外键约束(引用的记录不存在)
- 缺少字段值(在没有默认值的字段上)
- 不允许的空值(该字段不可为空)
您可以启用调试模式('debug' => true
在配置中)并查看响应的 X-Exception-Message
HTTP header(使用浏览器开发人员工具的网络选项卡).它将包含问题的原因。
注意:我是 PHP-CRUD-API.
的作者“mevdschee”