如何使用使用angular 2发布的nodejs保存包含图像的表单数据

时间:2017-11-14 12:23:35

标签: node.js mongodb express angular2-forms

我正在使用平均堆栈创建一个应用程序,其中我使用角度2作为客户端。我创建了一个包含一些输入字段和图像的表单。现在,为了提交表单,我使用formdata将数据发送到节点服务器。现在我无法在节点服务器上显示,访问和保存数据。请有人帮助我,因为我是新手,意思是堆栈。

数据阵列:

const newProduct = {
    category: this.pcategory,
    name: this.name,
    description: this.description,
    price: this.price,
    quantity: this.quantity,
    image: this.fileName
} 

这是发送数据的代码: imagedata包含文件的数据

addProduct(newProduct, imagedata:File) {
    let formData: FormData = new FormData();
    formData.append('body', JSON.stringify(newProduct));
    formData.append('file', image, newProduct.imagedata);
    let headers = new Headers();
    headers.append("enctype", "multipart/form-data"); 
    headers.append("Accept", "application/json");
    let options = new RequestOptions({ headers: headers });
    return this.http.post('http://localhost:3000/product/add' ,formData, options).map((response: Response) => response.json());
}

这是接收和保存数据的代码:

function (req, res) {

        var storage = multer.diskStorage({//multers disk storage settings

            destination: function (req, file, callback) {

                callback(null, './uploads');

            }

        });
        var upload = multer({//multer settings

            storage: storage

        }).any();

        var model = new Model(req.body);
        model.save(function (err) {
            if (err) {
                return res.status(400).send({
                    message: errorHandler.getErrorMessage(err)
                });
            } else {
                res.status(201).json(model);
            }
        });
        upload(req, res, function (err) {
            if (err) {
                // An error occurred when uploading
                console.log(err);
                return res.status(422).send("an Error occured")
            }
        });
    }

2 个答案:

答案 0 :(得分:0)

在角度2中,您无法使用此方法上传图像,请考虑使用此Angular 2模块ng2-file-uploader。您可以在此处查看演示应用Angular File Uploads with an Express Backend

答案 1 :(得分:0)

一种解决方案是将图像转换为base64字符串并在模型中传递该字符串。然后让base64字符串转换回服务器中的图像。