【问题标题】:Creating form-data from file object in nodejs从nodejs中的文件对象创建表单数据
【发布时间】:2019-07-20 19:53:13
【问题描述】:

我想在需要 Filefile 上的类型对象的节点端调用第三方 API(上传图像)。

前端是Angular所以流程是

.ts

const _file: File = __userAvatar.files[0];
const _userAvatarInfo = { userId: this.user.id, avatar: _file };
            this.userService.updateUserAvatar(_userAvatarInfo).subscribe(

UserService.ts

const _formData = new FormData();
_formData.append("avatar", _userAvatarInfo.avatar);
_formData.append("userId", _userAvatarInfo.userId);

return this.http.post(`${this.context}/userservice/user/updateuseravatar`, _formData);

Node API 层使用giuseppe

@Post("/user/updateuseravatar")
updateUserAvatar(@Req() req: any): Promise<any> {
      return TrusteeFacade.uploadResource({ resourceId: "some_id", resource: req.files.avatar });
}

立面层

static uploadResource(__resourceInfo: any): Promise<any> {
    const _resourceData = new FormData();
    _resourceData.append("mimetype", "image/png");
    _resourceData.append("file", __resourceInfo.resource);

    // this will not get printed    
    console.log("From**************", __resourceInfo.resource);
    return axios({
        method: "post",
        url: `${process.env.REST_URL}/resources/${__resourceInfo.resourceId}`,
            headers: _resourceData.getHeaders(),
            data: _resourceData
    });
}

在外观层显示

TypeError: source.on is not a function
    at Function.DelayedStream.create (D:\QPP Workspace\ContentPlatform\webapplications\application-services\node_modules\delayed-stream\lib\delayed_stream.js:33:10)
    at FormData.CombinedStream.append (D:\QPP Workspace\ContentPlatform\webapplications\application-services\node_modules\combined-stream\lib\combined_stream.js:44:37)
    at FormData.append (D:\QPP Workspace\ContentPlatform\webapplications\application-services\node_modules\form-data\lib\form_data.js:74:3)
    at Function.uploadResource (D:\QPP Workspace\ContentPlatform\webapplications\application-services\.bin\facade\trustee-facade.js:221:23)
    at trustee_facade_1.TrusteeFacade.getFileResourceId.then (D:\QPP Workspace\ContentPlatform\webapplications\application-services\.bin\api\user-service.js:118:51)
    at propagateAslWrapper (D:\QPP Workspace\ContentPlatform\webapplications\application-services\node_modules\async-l

__resourceInfo 在外观层有正确的信息,但是从它创建 FormData 是错误的原因吗?

【问题讨论】:

    标签: node.js axios multipartform-data form-data


    【解决方案1】:

    这就是我在外观层处理这个问题的方式,而不是这个

    _resourceData.append("file", __resourceInfo.resource);
    

    我使用Buffer.from 创建了file 字段

    _resourceData.append("file", Buffer.from(__resourceInfo.resource.data), { filename: __resourceInfo.resource.name });
    

    可能有另一种解决方案,但这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 2021-03-08
      • 1970-01-01
      • 2019-05-16
      • 2015-05-24
      • 2014-06-07
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多