2014-12-11 4 views
1

Я создаю приложение для чата между двумя пользователями, теперь я могу сделать простой текстовый чат с разными пользователями, используя node.js и socket.io. Теперь проблема возникает здесь, поскольку я должен отправить изображение в приложение чата, и после поиска в течение всего долгого дня я не могу получить идеальный node.js, в котором я могу отправить изображение в приложение чата. Поэтому я хочу знать, можно ли отправить изображение с помощью node.js. Вот мой простой файл node.js для отправки простого текстового сообщения от одного пользователя другому.Хотите отправить изображения с помощью node.js и socket.io в android

socket.on('privateMessage', function(data) { 
    socket.get('name', function (err, name) { 
     if(!err) { 
      // get the user from list by its name to get its socket, 
      // then emit event privateMessage 
      // again here we want to make you clear 
      // that every single client connection has its own 
      // unique SOcket Object, we need to get this Socket object 
      // to communicate with every other client. The socket variable 
      // in this scope is the client who wants to send the private 
      // message but the socket of the receiver is not know. 
      // Get it from the saved list when connectMe handlers gets called 
      // by each user. 
      onLine[data.to].emit('newPrivateMessage',{from:name, msg:data.msg, type:'Private Msg'}) 
     } 
    }); 
}); 

ответ

2

Вы можете использовать версию Base64 своего изображения и отправить его как это:

onLine[data.to].emit('newPrivateMessage',{from:name, img:data.img.toString('base64'), type:'Private Msg'}) 

.., а затем на стороне клиента, получить его и создать образ

socket.on("newPrivateMessage", function(data) { 
    if (data.img) { 
     var img = new Image(); 
     img.src = 'data:image/jpeg;base64,' + data.img; 

     // Do whatever you want with your image. 
    } 
}); 

UPDATE

Ниже приведен фрагмент, взятый из ссылки, которую я прокомментировал ниже. Как вы можете видеть, он берет изображение с input, read и отправляет его на сервер. После этого вы можете отправлять те же данные с сервера на другой клиент.

Полный текст приведен, пожалуйста, the article.

JavaScript (клиент)

... 

$('#imageFile').on('change', function(e) { 
    var file = e.originalEvent.target.files[0], 
    reader = new FileReader(); 

    reader.onload = function(evt) { 
    var jsonObject = { 
     'imageData': evt.target.result 
     } 

    // send a custom socket message to server 
    socket.emit('user image', jsonObject); 
    }; 

    reader.readAsDataURL(file); 
}); 

... 

HTML

... 

Image file: <input type="file" id="imageFile" /><br/> 

... 

UPDATE 2

Вот один пример, который я нашел:

Java (клиент)

File file = new File("path/to/the/image"); 

try { 
    FileInputStream imageInFile = new FileInputStream(file); 
    byte imageData[] = new byte[(int) file.length()]; 
    imageInFile.read(imageData); 

    // Converting Image byte array into Base64 String 
    String imageDataString = Base64.encodeBase64URLSafeString(imageData); 
} catch (...) { 
    ... 
} 

Приведенный выше фрагмент показывает, как читать файл и кодировать данные в строку base64. Итак, вы можете отправить его точно так же, как строка (я предполагаю).

Вот полный пример: How to convert Image to String and String to Image in Java?

Кроме того, я нашел encodeToString функции Base64.Encoder (java.util пакета), который вы можете использовать.

+0

Фактически, как отправлять от одного пользователя другому пользователю. Приведенный вами пример - отправить изображение с узла.js пользователю, и я хочу отправить его другому пользователю с помощью node.js. –

+0

. Не могли бы вы просто рассказать мне, как отправить изображение на сервер node.js? –

+0

Пожалуйста, взгляните на код здесь: http://ckazbah.com/2014/03/26/websockets-with-socket-io-simple-image-file-upload/ –

0

Самый простой способ, которым я могу думать о том, чтобы просто Base64 закодировать изображение и отправить его через текст трубы. Вам нужно будет различать текстовые и графические сообщения с информацией заголовка (может быть, отправить объект JSON?).

+0

Можете ли вы показать мне, есть ли где-нибудь пример? –

Смежные вопросы