ファイルを転送したいと思います。 Smack Apiを使ったOpenfireの画像やビデオ。
しかし、エラーコード503が毎回利用できなくなっています。
私のコーディングはSmack APIを使用してOpenfrieでファイルを転送するとエラーが発生する
public void onConnectionEstablished(){
fileTransferManager = FileTransferManager.getInstanceFor(connection);
OutgoingFileTransfer.setResponseTimeout(30000);
addFileTransferListener();
}
public void sendImage(File file, String to) throws SmackInvocationException {
if (fileTransferManager == null || !isConnected()) {
throw new SmackInvocationException("server not connected");
}
EntityFullJid fullJid;
OutgoingFileTransfer transfer = fileTransferManager.createOutgoingFileTransfer(getFullJid(to));
try {
transfer.sendFile(file, file.getName());
} catch (Exception e) {
Log.e(LOG_TAG, "send file error");
throw new SmackInvocationException(e);
}
while(!transfer.isDone()) {
if(transfer.getStatus().equals(FileTransfer.Status.refused) || transfer.getStatus().equals(FileTransfer.Status.error)
|| transfer.getStatus().equals(FileTransfer.Status.cancelled)){
throw new SmackInvocationException("send file error, " + transfer.getError());
}
}
Log.d(LOG_TAG, "send file status: " + transfer.getStatus());
if(transfer.getStatus().equals(FileTransfer.Status.refused) || transfer.getStatus().equals(FileTransfer.Status.error)
|| transfer.getStatus().equals(FileTransfer.Status.cancelled)){
throw new SmackInvocationException("send file error, " + transfer.getError());
}
}
private void addFileTransferListener() {
fileTransferManager.addFileTransferListener(new FileTransferListener() {
public void fileTransferRequest(final FileTransferRequest request) {
new Thread() {
@Override
public void run() {
IncomingFileTransfer transfer = request.accept();
String fileName = String.valueOf(System.currentTimeMillis());
File file = new File(FileUtils.getReceivedImagesDir(context), fileName + FileUtils.IMAGE_EXTENSION);
try {
transfer.recieveFile(file);
} catch (IOException e) {
e.printStackTrace();
}
catch (SmackException e) {
Log.e(LOG_TAG, "receive file error", e);
return;
}
while (!transfer.isDone()) {
if(transfer.getStatus().equals(FileTransfer.Status.refused) || transfer.getStatus().equals(FileTransfer.Status.error)
|| transfer.getStatus().equals(FileTransfer.Status.cancelled)){
Log.e(LOG_TAG, "receive file error, " + transfer.getError());
return;
}
}
}
}.start();
}
});
}
マイログ
<iq type="error" id="Z6hyN-147" from="[email protected]/smack" to="[email protected]/smack"><si xmlns="http://jabber.org/protocol/si" id="jsi_1095486335648182993" mime-type="image/jpeg" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="1509942029217.jpg" size="830807"><desc>1509942029217.jpg</desc></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field var="stream-method" type="list-single"><option><value>http://jabber.org/protocol/bytestreams</value></option><option><value>http://jabber.org/protocol/ibb</value></option></field></x></feature></si><error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
一つのこと、私は、ユーザーの送信者と受信者の両方が同じネットワーク上にある場合ということが観察されていますエラーが発生しません。
Openfireサーバーには以下のファイル転送設定があります。その意味と構成方法はわかりません。
私はstackoverflowのが、私が持っていない答えに質問をたくさん見てきました。
助けてください。ありがとう
ログファイル –
あなたは誰でもそのログを読むと思いますか?なぜあなたは私たちに30分スクロールさせるのですか?スクロールする必要がないように投稿してください。 – greenapps
質問を編集しました...あなたが助けてくれたら教えてください...また、私に知らせてください。受取人がオフラインの場合にopenfireがファイルを送ることができます –