将文件发布到 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”