1

サイトからサーバーにファイルをアップロードすると、正常に動作します。ただし、それらをダウンロードしようとすると、ファイルが毎回破損しています。サーバーでファイルマネージャーを開くと、これを介してファイルをダウンロードでき、正常に動作します。ファイルが正常にアップロードされていることはわかっていますが、ダウンロード プロセスでエラーが発生したようです。

ファイルは、テーブル内の ID とそれに続く拡張子で名前が付けられた私のサーバーに保存されます。名前はデータベースから取得され、ダウンロード時に使用されます。

id  |  userid  |  filename   |   extension  |  size
1       2         test.jpeg       jpeg         123456

//the extension column is just for testing, yes I know it's redundant

test.jpeg は 1.jpeg としてサーバーに保存されます。

//this is the very first bit of code on the page aside from starting the session
if(isset($_POST['downloadFile'])){
    $file = new fileprocessing;
    $fileID = mysql_real_escape_string($_POST['hiddenFileDownload']);
    $file->serveFile($fileID); 
}

これは、ファイルを見つけてユーザーがダウンロードできるようにする serveFile 関数です。

function serveFile($fileID){
    $sql = mysql_query("select * from files where id = '$fileID'");
    $file = mysql_fetch_array($sql);
    $ext = $file['extension'];

    header('Content-type: image/x-generic'); //I'm trying jpegs only right now

    header('Content-Disposition: attachment; filename="'.$file['filename'].".".$ext.'" ');

    readfile('/home/.../public_html/user_files/'. $fileID.".".$ext.' ');
}

ファイルがダウンロードされると、正しい名前が付けられます。これがどこで間違っているのかわかりません。ファイルを正しく開いていませんか?

編集 - servefile 関数で拡張子を調整しました

4

1 に答える 1

1

奇妙に聞こえるかもしれませんが、私は過去に「.jpeg」ファイル拡張子の表示に問題がありました (製品の画像をアップロードするサイトを持っています)。ただし、拡張子を「.jpg」に変更して、同じファイルを中断せずに表示することは可能です。アップロード時に「.jpeg」拡張子を「.jpg」に変更してみて、ダウンロード/表示の結果が変わらないかどうかを確認してください。

于 2012-10-10T23:34:06.160 に答える