Search code examples
androiddownloadforce-download

How to download file on android with PHP force download


I make an application , this can download file form server.

use this code >>>

public int startDownload(String url, String filename) {
// create url connector
URL u;
byte[] buffer = new byte[1024];
try {
  u = new URL(url + filename);
  HttpURLConnection c = (HttpURLConnection) u.openConnection();
  c.setRequestMethod("GET");
  c.setDoOutput(true);
  c.connect();
  InputStream in = c.getInputStream();
  m_lMaxDownloadSz = c.getContentLength();
  FileOutputStream f = new FileOutputStream(new File(FILE_PATH, filename));

  m_bCancelDownload = false;
  m_lCurrentDownloadSz = 0;
  int len = 0;
  while ((len = in.read(buffer, 0, 1024)) > 0) {

    // if download is canceled.
    if (m_bCancelDownload) {
      f.close();
      c.disconnect();
      return FILE_DOWNLOAD_CANCELED;
    }
    if (knot++ >= PROGRESS_STEP) {
      knot = 0;
      myProgressDialog.setProgress(GetDownloadStatus());
    }
    f.write(buffer, 0, len);
    m_lCurrentDownloadSz += len;
  }

  f.close();
  c.disconnect();

} catch (Exception e) {
  return FILE_DOWNLOAD_FAILED;
}

if (GetDownloadStatus() == 100) {
  return FILE_DOWNLOAD_FINISHED;
} else {
  return FILE_DOWNLOAD_FAILED;
}

}

and I want to use with PHP force download , but it not work , ordinary it use with file path like 'app/aaa.apk' it work! ,and I change to PHP file like 'php/forcedl.php' it not work.

I needs to use with php force download, How do I use?

ps. i have little english language skill , cause english language is not my main language

thank you


Solution

  • I discover for my answer android-Java Code __example:

            byte[] buffer = new byte[1024];         
            String url = "http://www.bla-bla.com/forcedownload.php"
    
    
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    InputStream content = execute.getEntity().getContent();
    
                    filesize = execute.getEntity().getContentLength();
                    fileOutput = new FileOutputStream(new File(FILE_PATH, "file_copyformserver.apk"));
    
                     while ((len = content.read(buffer, 0, 1024)) > 0) {
                         fileOutput.write(buffer, 0, len);
                         Thread.sleep(100);
                     }
    
                    fileOutput.close();
    
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
    

    php file __example:

          $file = '/home/bla-bla/domains/bla-bla.com/file/file.apk'; //not public folder
          if (file_exists($file)) {
             header('Content-Description: File Transfer');
             header('Content-Type: application/vnd.android.package-archive');
             header('Content-Disposition: attachment; filename='.basename($file));
             header('Content-Transfer-Encoding: binary');
             header('Expires: 0');
             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
             header('Pragma: public');
             header('Content-Length: ' . filesize($file));
             ob_clean();
             flush();
             readfile($file);
             exit;
         }
    

    this is short code , sorry if cannot run. :)