Autodesk Forge RealityCapture API初始化失败及图片上传验证咨询
问题原因说明
1. ERR_HTTP_HEADERS_SENT报错
这个错误是因为你的接口响应逻辑重复调用了res.send:当接口返回response.data.Error时,你执行了一次res.send(response.data.Error.msg),但没有加return终止函数执行,后面的res.send('文件添加成功')逻辑还会继续运行,同一个请求不能返回两次响应,就触发了这个报错。
2. 至少需要3张图片报错
这个错误是因为你的文件上传逻辑完全不符合要求,Forge服务器根本没有接收到有效图片:
- 你用
querystring.stringify处理multipart/form-data格式的请求体是错误的,multipart格式不能用查询字符串序列化 - 你只传递了本地文件的路径字符串,没有上传实际的图片二进制内容,Forge服务器无法读取你本地磁盘的文件,相当于没有上传任何有效图片
- 手动指定
content-type: multipart/form-data时没有携带boundary参数,请求格式本身就是无效的 - Windows路径中的反斜杠需要转义,你写的
C:\Dataset\会被JS当成转义字符处理,实际路径是错误的
修复步骤
- 先修改响应逻辑,避免重复发送响应:
if (response.data.Error) { return res.send(response.data.Error.msg); // 加return终止后续执行 }
- 替换上传逻辑,使用
form-data包处理文件上传:
const FormData = require('form-data'); const fs = require('fs'); // 上传部分修改为 const form = new FormData(); form.append('photosceneid', photosceneId); form.append('type', 'image'); // 逐个添加文件,注意路径反斜杠转义 form.append('file[0]', fs.createReadStream('C:\\Dataset\\FlowerPot\\20210527_082430.jpg')); form.append('file[1]', fs.createReadStream('C:\\Dataset\\FlowerPot\\20210527_082459.jpg')); // 剩余文件按相同规则添加 Axios({ method: 'POST', url: 'https://developer.api.autodesk.com/photo-to-3d/v1/file', headers: { 'Authorization': 'Bearer ' + access_token, ...form.getHeaders() // 自动生成带boundary的content-type,不要手动写 }, data: form })
验证图片上传成功的方法
- 查看上传接口返回的
response.data.Files字段:正常上传成功后,这个字段会列出所有文件的上传结果,每个文件的status为success就说明单文件上传成功,统计成功的数量和你上传的数量一致即可 - 调用ReCap的GET photoscene接口查询对应photoscene的详情,返回结果中的
numfiles字段就是当前场景内有效文件的数量,数值大于等于3就满足处理要求 - 如果上传接口返回结果中没有
Error字段,HTTP状态码为200,也可以作为上传成功的参考依据
内容的提问来源于stack exchange,提问作者cyprien fol
相关产品推荐
相关产品推荐

