Adam
Adam

Reputation: 933

Why is this PHP download script failing only on Android

I have a simple script that allows someone to download a movie file to their device. The code works well on everything I've tested except for Andriod. The Android device butchers the name and the file extension. It might call the file 2.qt or .bin. Why is this failing?

<?php

        if(isset($_GET['filename'])) {

            header('Content-Description: File Transfer');
            header('Content-Type: movie/quicktime');
            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"); 
    } else {
        echo "Link: <a href='test.php?filename=test.mov'>Download Video</a>";
    }
?>

Upvotes: 1

Views: 953

Answers (2)

Adam
Adam

Reputation: 933

The problem was that the filenames had spaces, and Android doesn't like that. I removed the spaces and everything is fine.

Upvotes: 0

Because Android doesn't natively support Quicktime, an Apple technology. It's also very possible that the client used to download this app isn't respecting the filename set on the http envelope as the name it uses to write the file to the filesystem, as there is nothing forcing it to.

Upvotes: 1

Related Questions