如何将图像作为multipart / form-data从android上传到Nodejs(gridfs是我存储图像的方式)

问题描述 投票:0回答:1

我打算用排球库来解决这个问题。有一些org.apache.http库(我认为这是不推荐的)。但我想在最新的buld上构建我的应用程序。

我正在使用gridfs保存图像,即;

var form = new formidable.IncomingForm();
    form.keepExtensions = true;     //keep file extension

    form.parse(req, function (err, fields, files) {

var writestream = gfs.createWriteStream({
                        filename: fields.temp_name,
                        mode: 'w',
                        content_type: 'image/png'
                    });
                    fs.createReadStream(files.template.path).pipe(writestream);


                    writestream.on('close', function (file) {
                        // do something with `file`
                        console.log(file.filename + ' Written To DB');
                        if(err){
                            res.send("error")
                        }else{
                            // do whatever you want
                            console.log("Upload Session name: "+"upload_complete"+req.session.username);
                            io.emit("upload_complete"+req.session.username, "File Uploaded Successfully");
                            //io.emit("upload_complete", "File Uploaded Successfully");
                        }
                    });

            }else{
                io.emit("upload_error"+req.session.username, "Duplicate Name");
            }

在网站(浏览器 - 服务器)我首先将图像保存到服务器上的临时目录然后我使用gridfs写入mongodb。 (我不知道这是不是正确的方法!)

如何从Android上传图片? volley更好?或者哪种方式最好?你能提供一个很好的指导吗?或者请分享一些代码..

android node.js mongodb express gridfs
1个回答
1
投票

我已经成功地使用了Retrofit2 - https://square.github.io/retrofit/ | https://github.com/square/retrofit

您可以使用此答案中的代码:https://stackoverflow.com/a/38891018/4455570

当您上传图片时,您提出了如下请求:

@Multipart
@POST("uploadAttachment")
Call<MyResponse> uploadAttachment(@Part MultipartBody.Part filePart); 
                               // You can add other parameters too

然后将图像附加到请求中,如下所示:

File file = // initialize file here

MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", 
file.getName(), RequestBody.create(MediaType.parse("image/*"), file));

Call<MyResponse> call = api.uploadAttachment(filePart);

在Node.js / Express.js中,您可以使用multer:https://github.com/expressjs/multer接受传入的图像

在您的路线中,您可以使用以下示例预处理图像:

app.post('/uploadAttachment', upload.single('image'), function (req, res, next) {
// req.file is the `avatar` file
// req.body will hold the text fields, if there were any
})

其中“image”是我认为的文件的名称。我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.