【问题标题】:Can't open downloaded file无法打开下载的文件
【发布时间】:2014-09-29 18:57:34
【问题描述】:

我尝试从 ftp 下载 apk 文件,但下载后无法打开该文件。
原始文件和下载的文件大小相同。 我正在使用 apache commons。 我的代码:

FTPClient ftpClient = new FTPClient();
        try{
            ftpClient.connect(mServer);        
            ftpClient.login(mUser, mPassword);              ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.enterLocalPassiveMode();
            BufferedOutputStream FileStream = new BufferedOutputStream(new FileOutputStream(cestaLuHa),8*1024);
            boolean status=ftpClient.retrieveFile("LuHa.apk", desFileStream);
            if(status){
                result = "Downlaoded";
            }
            FileStream.flush();
            ftpClient.logout();
            ftpClient.disconnect();
        }
        catch (IOException e){
            result = "Error";
        }

【问题讨论】:

    标签: android ftp download


    【解决方案1】:

    第一个下载文件;

    FTPClient client = null;
    File ExternalDirectory = Environment.getExternalStorageDirectory();
    File DownloadFile = new File(ExternalDirectory.getAbsoluteFile()+"//"+"file.apk");
        try {
            client = new FTPClient();
            client.setControlEncoding("UTF-8");
            client.connect(mServer, 21);
            client.login(mUser,mPassword);
            client.enterLocalPassiveMode();
            client.setFileType(FTPClient.BINARY_FILE_TYPE);
            OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(DownloadFile));
            boolean success = client.retrieveFile("//httpdocs//file.apk", outputStream);
            if (!success) {
                outputStream.close();
                Log.v("Download Status","Not Download");
            } else {
                outputStream.close();
                Log.v("Download Status","Downloaded");
            }
    

    这是打开apk的第二部分;

    Uri uri = Uri.fromFile(DownloadFile);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(uri, "application/apk"); //Maybe it 's different check different website for this
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
    

    我必须说的最后一件事,你必须在后台执行此操作,在 3.0 android 在前台下载被阻止后,你应该使用 AsyncTask 来执行此操作。 希望对你有所帮助

    【讨论】:

    • 这两个部分都能完美运行。谢谢你。问题似乎在于将下载的文件保存到内部存储中。
    • 没问题,祝你有美好的一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多