使用Web浏览器从Android应用程序下载文件

时间:2014-10-05 15:33:29

标签: android sockets http fileserver

我想让用户通过他的计算机上的网络浏览器(在本地网络中)从我的Android应用程序下载文件。 起初我在计算机上的eclipse中编写了这个功能的代码,它运行正常。但是,当我尝试在Android应用程序中运行它(该文件是从资产路径复制)时,我无法再下载该文件。 Firefox只是告诉我它无法下载,因为无法读取源文件。

这是我的应用程序中的代码。它没有任何错误。

public class test implements Runnable {

public boolean running = true;
ServerSocket servsock = null;
Context context;
String filename = "test.jar";

public test(Context con){
    this.context=con;
}

public Integer createSocketandStart(){
    for (int i=1234; i<2000; ++i){
        try{
            servsock = new ServerSocket(i);
            servsock.setSoTimeout(1000000);
            new Thread(this).start();
            return i;
        }catch(Exception e){
            System.out.print("socket error");
        }
    }
    return null;
}

public void run(){

    File f= new File(context.getFilesDir(), filename);
    try {

        InputStream is = context.getAssets().open(filename);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();

        FileOutputStream fos = new FileOutputStream(f);
        fos.write(buffer);
        fos.close();

    } catch (Exception e) { throw new RuntimeException(e); }

    while (running) {

        try {
            Socket connection = servsock.accept();
            OutputStream out = new BufferedOutputStream(connection.getOutputStream());
            PrintStream pout = new PrintStream(out);
            InputStream file = new FileInputStream(f);

            pout.print("HTTP/1.0 200 OK\r\n" +
                    "Content-Type: application/octet-stream\r\n" +
                    "Content-Disposition: attachment; filename=\"" + filename + "\"\r\n" +
                    "Date: " + new Date() + "\r\n" +
                    "Server: FileServer 1.0\r\n\r\n");


            byte[] buffer = new byte[1000];
            while (file.available() > 0) {
                out.write(buffer, 0, file.read(buffer));
            }

            out.flush();

            if (connection != null) connection.close();

            file.close();
            pout.close();
            out.close();

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

    }
}

}

0 个答案:

没有答案