You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ng2-file-upload上传文件遇JSON循环结构转换错误求助

解决Angular 4 + ng2-file-upload上传文件时的"Converting circular structure to JSON"错误

我来帮你搞定这个问题!这个错误本质是你要序列化的this.document对象里藏着循环引用——简单说就是对象里某个属性绕了一圈又引用回自己了,比如A属性引用B,B又引用A,JSON.stringify()根本处理不了这种“闭环”结构。ng2-file-upload返回的文件相关对象(比如FileItem)内部就可能有这类隐藏的循环引用,直接传给API或者序列化自然会报错。

下面给你两种可行的解决方案,优先推荐第一种,因为它符合文件上传的标准流程:

方案1:用FormData传递文件(最稳妥)

上传文件本来就该用multipart/form-data格式,而不是JSON。你需要把文件包装到FormData里再发请求:

// 先创建FormData实例
const formData = new FormData();
// 把文件添加进去,第三个参数是文件名(可选,不传的话会用文件的默认名称)
formData.append('uploaded_file', this.document.file, this.document.file.name);
// 如果还有其他要传递的参数,比如备注、分类,也可以一起加进去
formData.append('doc_type', 'invoice');

// 调用API时直接传FormData就行
this.ocrService.uploadDocument(formData).subscribe(response => {
  f.resetForm();
  this.router.navigate(['/ocr']);
});

然后修改你的ocrService里的上传方法,Angular的HttpClient会自动识别FormData并设置正确的请求头,不用手动配置:

// ocr.service.ts中的uploadDocument方法
uploadDocument(formData: FormData): Observable<any> {
  return this.http.post('/api/ocr/upload', formData);
}

Flask后端这边,用request.files就能拿到文件:

from flask import Flask, request

@app.route('/api/ocr/upload', methods=['POST'])
def upload_document():
    # 获取上传的文件
    uploaded_file = request.files.get('uploaded_file')
    if uploaded_file:
        # 这里可以做保存文件、调用OCR接口等操作
        uploaded_file.save(f'./uploads/{uploaded_file.filename}')
        return {'status': 'success', 'message': '文件上传成功'}
    return {'status': 'error', 'message': '未检测到上传的文件'}, 400

方案2:清理对象,移除循环引用(仅适用于传递元数据)

如果你只是想传递文件的元数据(文件名、大小这类),不需要传文件内容,可以手动提取安全的属性,避开循环引用的部分:

// 只提取File对象的基础属性,不要带整个对象
const cleanDoc = {
  filename: this.document.file.name,
  file_size: this.document.file.size,
  mime_type: this.document.file.type
};

// 现在再序列化就不会报错了
const docJson = JSON.stringify(cleanDoc);

不过要注意,这种方法没法传递文件本身,所以上传文件还是优先用FormData。

额外排查小技巧

你可以用console.log(JSON.parse(JSON.stringify(this.document)))来快速定位哪个属性导致了循环引用——如果执行这句话报错,就把对象拆开来一个个属性测试,找到那个引发循环的属性并排除它。

内容的提问来源于stack exchange,提问作者Imran Ahmad Ghazali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:35