将图像从Android上传到节点

时间:2017-03-28 16:58:47

标签: android node.js base64 image-uploading

我正在尝试通过Android Studio将多个图像上传到我的节点服务器。但是,图像文件似乎总是在服务器上损坏。我能够在Android中拍摄并预览图片,但无法将其存储在我的服务器上。

这是我的服务器代码

app.post('/upload', function(req, res) {
    var base64Data = req.rawBody;
    fs.writeFile("test.jpg",base64Data,'base64',function(err,written){
        if(err) console.log(err);
        else {
            console.log("file Succesfully written ");    
            cloudinary.uploader.upload("test.jpg", function (image) {
                if(image !== undefined) {

                     res.json({link: image.secure_url}).end();
                     console.log("url = " , image.secure_url);
                 //   fs.unlink(ImageFile);
                } else console.log.error("Error uploading to Cloudinary, ", image);
            });
        }
    });
});

这是我用于将我的位图转换为编码的Base64字符串的前端代码。

final String encodedString = ImageBase64.encode(fileArray.get(i));

这是设置后encodedString保持的日志。显然,不显示完整值。

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                                                                          AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                                                                          AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAMgA+gDASIA
                                                                          AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA

然而,在我的后端,它显示为

2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB%0AAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH%2F2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB%0AAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH%2FwAARCAMgA%2BgDASIA%0AAhEBAxEB%2F8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQ

2 个答案:

答案 0 :(得分:1)

InputStream imageStream;
                try {
                    imageStream = getContentResolver().openInputStream(uri);//uri is the image URI
                    Bitmap bm = BitmapFactory.decodeStream(imageStream);
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
                    byte[] byteArray = baos.toByteArray();
                    String encodedImage = Base64.encodeToString(byteArray,Base64.NO_WRAP);//encodedImage is your image string

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

答案 1 :(得分:1)

如果你对它进行了网址编码,那么你应该对它进行url解码。