首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送图片socket io和android

问发送图片socket io和android
EN

Stack Overflow用户
提问于 2017-05-23 17:40:14
回答 3查看 3.1K关注 0票数 0

我是socket.io的初学者。我已经用过图书馆了

https://www.npmjs.com/package/socket.io-stream

我们成功地使用浏览器上传了图像。但现在,我想从android应用程序上传图片。如果谁有android代码,请给我..

https://github.com/socketio/socket.io-client-java/issues/29

我一直在谷歌上搜索,但没有找到任何适当的解决方案。

EN

回答 3

Stack Overflow用户

发布于 2017-05-24 15:01:27

代码语言:javascript
复制
   var imageBuffer = customJs.decodeBase64Image(base64Data);
   var imageTypeDetected = imageBuffer.type.match(/\/(.*?)$/);
   var filename = 'profile-' + Date.now() + '.' + imageTypeDetected[1];
   // config.uploadImage --- Folder path where you want to save.
   var uploadedImagePath = config.uploadImage + filename;
   try {
       fs.writeFile(uploadedImagePath, imageBuffer.data, function () {
       dbMongo.updateImage({email: decoded.email, user_id: decoded.userId, 'profile_picture': config.showImagePath + filename}, function (res) {
       if (res.error) { 
       socket.emit('set_update_image', {'error': 1, 'message': 'Error!' + res.message, 'data': null, 'status': 400});
       } else {
         console.log(res);
         socket.emit('set_update_image', res);
       }
       });
     });
      } catch (e) {
           socket.emit('set_update_image', {'error': 1, 'message': 'Internal server error ' + e, 'data': null, 'status': 400});
      }

从其他文件调用函数

代码语言:javascript
复制
exports.decodeBase64Image = function decodeBase64Image(dataString) {
var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
var response = {};

if (matches.length !== 3)
{
    return new Error('Invalid input string');
}

response.type = matches[1];
response.data = new Buffer(matches[2], 'base64');

return response;
}
票数 3
EN

Stack Overflow用户

发布于 2017-05-23 17:44:45

使用socket从android上传图片,需要以base64字符串的形式发送图片。

下面是将图像转换为base64的示例,然后发送与另一个参数相同的数据。

代码语言:javascript
复制
String base64Image = getBase64Data(dirPath + "/" + fileName);

public String getBase64Data(String filePath) {
        try {
            InputStream inputStream = new FileInputStream(filePath);//You can get an inputStream using any IO API
            byte[] bytes;
            byte[] buffer = new byte[8192];
            int bytesRead;
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            try {
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    output.write(buffer, 0, bytesRead);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            bytes = output.toByteArray();
            return "data:image/jpeg;base64," + Base64.encodeToString(bytes, Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
票数 0
EN

Stack Overflow用户

发布于 2017-05-23 17:46:09

在安卓系统中,您需要使用Base64对图像进行编码

代码语言:javascript
复制
 public void sendImage(String path)
 {
    JSONObject sendData = new JSONObject();
    try{
          sendData.put("imageData", encodeImage(path));
          socket.emit("image",sendData);
       }catch(JSONException e){

       }
 }

 private String encodeImage(String path)
 {
      File imagefile = new File(path);
      FileInputStream fis = null;
      try{
          fis = new FileInputStream(imagefile);
      }catch(FileNotFoundException e){
          e.printStackTrace();
      }
      Bitmap bm = BitmapFactory.decodeStream(fis);
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
      byte[] b = baos.toByteArray();
      String encImage = Base64.encodeToString(b, Base64.DEFAULT);
      //Base64.de
      return encImage;
}

在服务器端,接收图像并进行解码

代码语言:javascript
复制
socket.on("image", function(info) {
    var img = new Image();
    img.src = 'data:image/jpeg;base64,' + info.imageData;

});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44131145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档