Загрузка файла xmpp с использованием smack

Abdul спросил: 28 апреля 2018 в 08:53 в: xmpp

Я не могу загрузить файл на xmpp, используя smack client android. slot.puturl () возвращает "https:// localhost: 7443 / httpfileupload / 27c97df7-dbbf-47ff-b19a-3ac624e51cf0 / 1.jpg"

 HttpFileUploadManager manager = HttpFileUploadManager.getInstanceFor(mConnection);
    try {
        Slot slot = manager.requestSlot(path, 10000);        uploadFileToSlot(new File(path), slot);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (XMPPException.XMPPErrorException e) {
        e.printStackTrace();
    } catch (SmackException e) {
        e.printStackTrace();
    }

1 ответ

Devendra Singh ответил: 04 мая 2018 в 06:09

Вы можете попробовать этот код.

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);

}

Обратитесь Передача файлов не работает smack 4.1 android