Android 应用程序使用 Smack 和 Openfire 4.1.4 发送图像时出错

标签 android xmpp openfire file-transfer

我正在使用带有 Openfire 4.1.4 的 XMPP 开发聊天应用程序,一对一的文本聊天工作正常,但是当我发送图像时出现错误

这是我的文件发送代码:

Log.e("ad",">selectedImagePath====="+selectedImagePath);
    FileTransferManager manager = FileTransferManager.getInstanceFor(Config.conn1);
                OutgoingFileTransfer transfer;
                transfer = manager.createOutgoingFileTransfer(userJid+"/"+Config.conn1); //JID - user@host/resource
                File file = new File(selectedImagePath);
                try {
                    transfer.sendFile(file, "image message test");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                while (!transfer.isDone()) {
                    if (transfer.getStatus().equals(AMPExtension.Status.error)) {
                        Log.e("ad","ERROR!!! " + transfer.getError());
                    } else if (transfer.getStatus().equals(FileTransfer.Status.cancelled)
                            || transfer.getStatus().equals(FileTransfer.Status.refused)) {
                        Log.e("ad","Cancelled!!! " + transfer.getError());
                    }
                    try {
                        Thread.sleep(1000L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                if (transfer.getStatus().equals(FileTransfer.Status.refused) ) {    
                    Log.e("ad","refused cancelled error" + transfer.getError());
                }
                else  if (transfer.getStatus().equals(FileTransfer.Status.error))
                {
                    Log.e("ad","error="+ transfer.getError());
                }
                else  if  (transfer.getStatus().equals(FileTransfer.Status.cancelled))
                {
                    Log.e("ad","cancelled");
                }
                else {
                    Log.e("ad","Success");
                }

这是我的日志:

  02-23 14:56:32.489 14951-14951/com.app.chatv1 E/ad: >selectedImagePath=====/storage/emulated/0/Pictures/1519194363122.jpg
02-23 14:56:33.490 14951-14951/com.app.chatv1 E/ad: error=null

我还有另一个相关问题:当​​我成功将图像发送到服务器时,它将放置在服务器位置?

最佳答案

   FileTransferManager ftm1 =FileTransferManager.getInstanceFor(connection);
   FileTransferManager ftm2=FileTransferManager.getInstanceFor(connection2);

    ftm2.addFileTransferListener(new FileTransferListener() {
        @Override
        public void fileTransferRequest(FileTransferRequest request) {
            IncomingFileTransfer ift = request.accept();
            try {
                InputStream is = ift.recieveFile();
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                int nRead;
                byte[] buf = new byte[1024];
                while ((nRead = is.read(buf,  0, buf.length)) != -1) {
                    os.write(buf, 0, nRead);
                }
                os.flush();
                dataReceived = os.toByteArray();
            } catch (SmackException | IOException | XMPPErrorException e) {
                e.printStackTrace();
            }
            if (Arrays.equals(dataToSend, dataReceived)) {
                System.out.println("Received data matches send data. \\o/");
            } else {
                System.err.println("Recieved data DOES NOT match send data. :(");
            }
        }
    });

    OutgoingFileTransfer oft = ftm1.createOutgoingFileTransfer(XmppStringUtils.completeJidFrom(USER, SERV, "resourse"));
    oft.sendStream(new ByteArrayInputStream(dataToSend), "hello.txt", dataToSend.length, "A greeting");
    outerloop: while (!oft.isDone()) {
        switch (oft.getStatus()) {
        case error:
            System.out.println("Filetransfer error: " + oft.getError());
            break outerloop;
        default:
            System.out.println("Filetransfer status: " + oft.getStatus() + ". Progress: " + oft.getProgress());
            break;
        }
        Thread.sleep(1000);
    }

    connection.disconnect();
    connection2.disconnect();
    Thread.sleep(1000);
}

一个连接正在发送文件,另一个连接正在接收这是工作代码。

关于Android 应用程序使用 Smack 和 Openfire 4.1.4 发送图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48944954/

相关文章:

AndroidCAStore 在 4.2.2 Jellybean 上抛出 NullPointerException 警告

使用 Mavericks OS 升级 MAC 后,Openfire 服务器未启动

ssl - Openfire SSL 证书

java - 创建 Android Intent 并指定目标 Activity 时,这个 ".class"语法是什么?

java - 添加对设置屏幕 android 的支持

java - Android fragment 问题

android - 在没有互联网访问的情况下从服务器端向 android 应用程序发送警报/通知

android - 自定义 TextInputLayout 在后按时设置错误的值

objective-c - iOS XMPP 框架获取所有注册用户

javascript - 如何使用 converse 库发送聊天消息