Question

I am using the following code to receive file from another user

FileTransferManager fm  = new FileTransferManager(xmppConnection);
fm.addFileTransferListener(new FileTransferListener() {

    public void fileTransferRequest(final FileTransferRequest request) {
        Log.i("XMPPClient", "fileTransferRequest ");
        new Thread() {
            @Override
            public void run() {
                IncomingFileTransfer transfer = request.accept();
                Log.i("XMPPClient", "IncomingFileTransfer " + transfer);
                File mf = Environment.getExternalStorageDirectory();
                File file = new File(mf + "/" + transfer.getFileName());
                try {
                    transfer.recieveFile(file);
                    while(!transfer.isDone()) {
                        Log.i("XMPPClient", "while..... ");
                        try {
                            Thread.sleep(1000L);
                        } catch (Exception e) {
                            Log.e("XMPPClient", e.getMessage());
                        }
                        if (transfer.getStatus().equals(
                                org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error)) {
                            Log.e("ERROR!!! ", transfer.getError() + "");
                        }
                        if (transfer.getException() != null) {
                            transfer.getException().printStackTrace();
                        }
                    }
                } catch (Exception e) {
                    Log.e("XMPPClient", e.getMessage());
                }
            };
        }.start();
    }
});

} catch (IllegalStateException e) {
    e.printStackTrace();
} 

I have written this code in the launcher activity of my application.Also in the launcher activity, I have written code to send the file on button click. I am running this application on two different devices say A and B. From A , I am sending the file on button click and file is transferred from device A . But the file is not received in device B even it is not showing any log messages or any error

What is the issue?

Was it helpful?

Solution

Asmack file transfer is not good you should create the plugin to upload a file on server and return a url using that..

the plugin servelet will look like

package org.jivesoftware.openfire.plugin.fileupload;




import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.jivesoftware.admin.AuthCheckFilter;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.plugin.Fileupload;



    /**

     *
     * @author Jaspreet
     */
    public class FileUploadServlet extends HttpServlet {

        private Fileupload plugin;
        private static Logger Log = Logger.getLogger(Fileupload.class);
        protected long amountWritten = -1;
        private static final int BUFFER_SIZE = 8192;
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            super.init(servletConfig);
            plugin = (Fileupload) XMPPServer.getInstance().getPluginManager().getPlugin("fileupload");
     Log.info("File upload  plugin" +plugin.getClass());
            // Exclude this servlet from requiring the user to login
            AuthCheckFilter.addExclude("fileupload/userservice");
            Log.info("Fileupload  plugin   AuthCheckFilter.addExclude" );
        }

        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException
        {
            PrintWriter out = response.getWriter();
            try{
            Log.info("response HttpServletRequest ok");


             String name=request.getParameter("name");
             String type=request.getParameter("type");
             Log.info("type = "+type);
             Log.info("name = "+name);
             if (type.equals("download")) {
                 Log.info("line 68");
                 OutputStream outputStream=response.getOutputStream();
                FileInputStream fileInputStream=new FileInputStream(Fileupload.directory+"/"+name);
                 Log.info("line 72 ");
                sendFile(response, outputStream, fileInputStream);
                 Log.info("line 73");
                 return;
             } 

            }catch (Exception e) {
                // TODO: handle exception
                replyMessage("error", response, out);
                Log.error("error while downloading file");
            Log.info("error = "+e.getMessage());
            }
            }
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {


            /* String type = request.getHeader("type_");
             String name=request.getHeader("name");
             Log.info("type = "+type);
             Log.info("name = "+name);
            if(type.equals("upload")){*/
             PrintWriter out = response.getWriter();
                 try {
                     Log.info("line 93");

                        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
                        Log.info("line 94");
                        for (FileItem item : items) {
                            Log.info("line 96");
                            if (item.isFormField()) {
                                Log.info("line 98");
                                // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                                String fieldname = item.getFieldName();
                                String fieldvalue = item.getString();
                                // ... (do your job here)
                            } else {
                                // Process form file field (input type="file").
                                Log.info("line 105");
                                String fieldname = item.getFieldName();
                                String filename = FilenameUtils.getName(item.getName());
                                Log.info("line 108");
                                InputStream filecontent = item.getInputStream();
                                Log.info("line 110");
                               // InputStream inputStream=(InputStream) request.getAttribute("uploaded");
                                //InputStream inputStream=request.getInputStream();
                                File file = new File(Fileupload.directory+"/"+filename);
                                if(!file.exists()){
                                    file.createNewFile();
                                }
    //                          File file = new File(filename);
                                Log.info("line 114");
                                FileOutputStream fop = new FileOutputStream(file);
                                Log.info("line 116");
                                uploadFile(response, fop, filecontent);
                                Log.info("line 118");
    //                          replyMessage("error", response, out);
                                replyMessage("your server url /plugins/fileupload/userservice?type=download&name="+filename, response, out);
                            }
                        }
                    } catch (Exception e) {
                        replyMessage("error", response, out);
                        Log.error("error while uploading file");
                        throw new ServletException("Cannot parse multipart request.", e);
                    }

            /*  InputStream inputStream=(InputStream) request.getAttribute("uploaded");
                //InputStream inputStream=request.getInputStream();
                File file = new File(name);
                FileOutputStream fop = new FileOutputStream(file);
                uploadFile(response, fop, inputStream);*/

            // }


        }
        private void replyMessage(String message,HttpServletResponse response, PrintWriter out){
            response.setContentType("text/xml");        
            out.println("{\"result\":\"" + message + "\"}");
            out.flush();
        }

        private void uploadFile(HttpServletResponse response, OutputStream out,InputStream inputStream){


            final byte[] b = new byte[BUFFER_SIZE];
            int count = 0;
            amountWritten = 0;

            do {
                // write to the output stream
                try {
                    out.write(b, 0, count);
                } catch (IOException e) {
                }

                amountWritten += count;

                // read more bytes from the input stream
                try {
                    count = inputStream.read(b);
                } catch (IOException e) {
                    Log.info("error = "+e.getMessage());
                }
            } while (count != -1 );
            try {
                out.flush();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Log.info("error = "+e.getMessage());
            }
            // the connection was likely terminated abrubtly if these are not equal




        }
        private void sendFile(HttpServletResponse response, OutputStream out,FileInputStream inputStream){

            try{
            response.setContentType("video/mp4");      


            final byte[] b = new byte[BUFFER_SIZE];
            int count = 0;
            amountWritten = 0;

            do {
                // write to the output stream
                try {
                    out.write(b, 0, count);
                } catch (IOException e) {
                    //throw new XMPPException("error writing to output stream", e);
                }

                amountWritten += count;

                // read more bytes from the input stream
                try {
                    count = inputStream.read(b);
                } catch (IOException e) {
                    //throw new XMPPException("error reading from input stream", e);
                }
            } while (count != -1 );

            }catch (Exception e) {
                // TODO: handle exception
                Log.info("error = "+e.getMessage());
            }
            try {
                response.flushBuffer();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           // out.flush();
        }
        private void replyError(String error,HttpServletResponse response, PrintWriter out){
            response.setContentType("text/xml");        
            out.println("<error>" + error + "</error>");
            out.flush();
        }



        @Override
        public void destroy() {
            super.destroy();
            // Release the excluded URL
         //   AuthCheckFilter.removeExclude("userService/userservice");
        }
    }

OTHER TIPS

I created it in this way

package org.jivesoftware.openfire.plugin;

import java.io.File;
import java.io.IOException;

import org.apache.log4j.Logger;

import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;


public class Fileupload implements Plugin {

    private static Logger Log = Logger.getLogger(Fileupload.class);
    public static String directory="/usr/share/openfire/resources/videos";
    public void initializePlugin(PluginManager manager, File pluginDirectory) {
        try{
        File file=new File(directory);
        file.mkdir();
        }catch (Exception e) {
            // TODO: handle exception
            Log.info("error while creating ../resources/Videos= "+ e.getMessage());
        }
    }



    public void destroyPlugin() {
    }

}

I think you have not added provider for the same

Add this method after login

private static void Configure(Context context) {
        try {
            ProviderManager pm = ProviderManager.getInstance();
            pm.addIQProvider("query", "urn:xmpp:groupvcard",
                    new GroupInfoVcard.Provider(context));
            pm.addIQProvider("query", "jabber:iq:search",
                    new SearchItem.Provider(context));
            System.out.println("SearchItem added");
            pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
            pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
            pm = ProviderManager.getInstance();
            pm.addExtensionProvider("active",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("composing",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("paused",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("inactive",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("gone",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            Log.e("DeliveryReceipt.ELEMENT", DeliveryReceipt.ELEMENT);
            pm.addExtensionProvider(DeliveryReceipt.ELEMENT,
                    DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());
            pm.addIQProvider("list", "urn:xmpp:archive", new ListIQProvider(context));
            pm.addIQProvider("chat", "urn:xmpp:archive", new ChatIQProvider());
            System.out.println("ping provider added");

            pm.addIQProvider("ping", "urn:xmpp:ping", new PingProvider());
            System.out.println("ping provider added end");
            pm.addExtensionProvider(DeliveryReceiptRequest.ELEMENT,
                    DeliveryReceipt.NAMESPACE,
                    new DeliveryReceiptRequest.Provider());

            pm.addIQProvider("query", "jabber:iq:private",
                    new PrivateDataManager.PrivateDataIQProvider());
            // Time
            try {
                pm.addIQProvider("query", "jabber:iq:time",
                        Class.forName("org.jivesoftware.smackx.packet.Time"));
            } catch (ClassNotFoundException e) {
                System.err
                        .println("Can't load class for org.jivesoftware.smackx.packet.Time");
            }

            // Roster Exchange
            pm.addExtensionProvider("x", "jabber:x:roster",
                    new RosterExchangeProvider());
            // Message Events
            pm.addExtensionProvider("x", "jabber:x:event",
                    new MessageEventProvider());
            // Chat State
            pm.addExtensionProvider("active",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("composing",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("paused",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("inactive",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());
            pm.addExtensionProvider("gone",
                    "http://jabber.org/protocol/chatstates",
                    new ChatStateExtension.Provider());

            // XHTML
            pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im",
                    new XHTMLExtensionProvider());

            // Group Chat Invitations
            pm.addExtensionProvider("x", "jabber:x:conference",
                    new GroupChatInvitation.Provider());

            // Service Discovery # Items
            pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
                    new DiscoverItemsProvider());
            // Service Discovery # Info
            pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",
                    new DiscoverInfoProvider());
            // Data Forms
            pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
            // MUC User
            pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user",
                    new MUCUserProvider());
            // MUC Admin
            pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin",
                    new MUCAdminProvider());
            // MUC Owner
            pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner",
                    new MUCOwnerProvider());
            // Delayed Delivery
            pm.addExtensionProvider("x", "jabber:x:delay",
                    new DelayInformationProvider());
            pm.addExtensionProvider("delay", "urn:xmpp:delay",
                    new DelayInformationProvider());
            // Version
            try {
                pm.addIQProvider("query", "jabber:iq:version",
                        Class.forName("org.jivesoftware.smackx.packet.Version"));
            } catch (ClassNotFoundException e) {
                System.err
                        .println("Can't load class for org.jivesoftware.smackx.packet.Version");
            }
            // VCard
            pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
            // Message Requests
            pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
                    new OfflineMessageRequest.Provider());
            // Offline Message Indicator
            System.out.println("offline provider added");
            pm.addExtensionProvider("offline",
                    "http://jabber.org/protocol/offline",
                    new OfflineMessageInfo.Provider());
            // Last Activity
            pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
            // SharedGroupsInfo
            pm.addIQProvider("sharedgroup",
                    "http://www.jivesoftware.org/protocol/sharedgroup",
                    new SharedGroupsInfo.Provider());

            // JEP-33: Extended Stanza Addressing
            pm.addExtensionProvider("addresses",
                    "http://jabber.org/protocol/address",
                    new MultipleAddressesProvider());

            // FileTransfer
            pm.addIQProvider("si", "http://jabber.org/protocol/si",
                    new StreamInitiationProvider());
            pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
                    new BytestreamsProvider());
            pm.addIQProvider("open", "http://jabber.org/protocol/ibb",
                    new OpenIQProvider());
            pm.addIQProvider("data", "http://jabber.org/protocol/ibb",
                    new DataPacketProvider());
            pm.addIQProvider("close", "http://jabber.org/protocol/ibb",
                    new CloseIQProvider());
            pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb",
                    new DataPacketProvider());

            // Privacy
            pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());

            // SHIM
            pm.addExtensionProvider("headers", "http://jabber.org/protocol/shim",
                    new HeadersProvider());
            pm.addExtensionProvider("header", "http://jabber.org/protocol/shim",
                    new HeaderProvider());

            // PubSub
            pm.addIQProvider("pubsub", "http://jabber.org/protocol/pubsub",
                    new PubSubProvider());
            pm.addExtensionProvider("create", "http://jabber.org/protocol/pubsub",
                    new SimpleNodeProvider());
            pm.addExtensionProvider("items", "http://jabber.org/protocol/pubsub",
                    new ItemsProvider());
            pm.addExtensionProvider("item", "http://jabber.org/protocol/pubsub",
                    new ItemProvider());
            pm.addExtensionProvider("subscriptions",
                    "http://jabber.org/protocol/pubsub",
                    new SubscriptionsProvider());
            pm.addExtensionProvider("subscription",
                    "http://jabber.org/protocol/pubsub", new SubscriptionProvider());
            pm.addExtensionProvider("affiliations",
                    "http://jabber.org/protocol/pubsub", new AffiliationsProvider());
            pm.addExtensionProvider("affiliation",
                    "http://jabber.org/protocol/pubsub", new AffiliationProvider());
            pm.addExtensionProvider("options", "http://jabber.org/protocol/pubsub",
                    new FormNodeProvider());
            // PubSub owner
            pm.addIQProvider("pubsub", "http://jabber.org/protocol/pubsub#owner",
                    new PubSubProvider());
            pm.addExtensionProvider("configure",
                    "http://jabber.org/protocol/pubsub#owner",
                    new FormNodeProvider());
            pm.addExtensionProvider("default",
                    "http://jabber.org/protocol/pubsub#owner",
                    new FormNodeProvider());
            // PubSub event
            pm.addExtensionProvider("event",
                    "http://jabber.org/protocol/pubsub#event", new EventProvider());
            pm.addExtensionProvider("configuration",
                    "http://jabber.org/protocol/pubsub#event",
                    new ConfigEventProvider());
            pm.addExtensionProvider("delete",
                    "http://jabber.org/protocol/pubsub#event",
                    new SimpleNodeProvider());
            pm.addExtensionProvider("options",
                    "http://jabber.org/protocol/pubsub#event",
                    new FormNodeProvider());
            pm.addExtensionProvider("items",
                    "http://jabber.org/protocol/pubsub#event", new ItemsProvider());
            pm.addExtensionProvider("item",
                    "http://jabber.org/protocol/pubsub#event", new ItemProvider());
            pm.addExtensionProvider("retract",
                    "http://jabber.org/protocol/pubsub#event",
                    new RetractEventProvider());
            pm.addExtensionProvider("purge",
                    "http://jabber.org/protocol/pubsub#event",
                    new SimpleNodeProvider());

            // Nick Exchange
            pm.addExtensionProvider("nick", "http://jabber.org/protocol/nick",
                    new Nick.Provider());

            // Attention
            pm.addExtensionProvider("attention", "urn:xmpp:attention:0",
                    new AttentionExtension.Provider());

            // XEP-184 Message Delivery Receipts
            pm.addExtensionProvider("received", "urn:xmpp:receipts",
                    new DeliveryReceipt.Provider());
            pm.addExtensionProvider("request", "urn:xmpp:receipts",
                    new DeliveryReceipt.Provider());

            pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
                    new BytestreamsProvider());
            pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
                    new DiscoverItemsProvider());
            pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",
                    new DiscoverInfoProvider());

            /*pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
                    new OfflineMessageRequest.Provider());
            // Offline Message Indicator
            pm.addExtensionProvider("offline",
                    "http://jabber.org/protocol/offline",
                    new OfflineMessageInfo.Provider());*/
            pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
            pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top