2017-12-04 61 views
0

jsファイルリーダーとAJAXを使用してサーバーにファイルをアップロードしようとしています。js fileReaderを使用してファイルをアップロードするとファイルが破損する

FileAPIfileReaderを使用してファイルを読み取り、文字列に変換してから、AJAXリクエストでサーバーに送信しました。ここ は私のクライアント側のjsコードです:ここでは

function upload() { 
    var file = document.getElementById('periodExcel').files[0]; 
    if (file) { 
     console.log(file); 
     var reader = new FileReader(); 
     reader.readAsText(file, file.type); 
     console.log(reader); 
     reader.onload = uploadAndRun; 
    } 
} 
function uploadAndRun(event) { 
    console.log(event); 
    var result = event.target.result; 
    $('#js').html(result); 
    var fileName = document.getElementById('periodExcel').files[0].name; //Should be 'picture.jpg' 

    $.post('./upload.php', {data: result, name: fileName}, function(result2){ 
     $('#php').html(result2); 
    }); 
} 

は、アップロードPHPスクリプトです:

file_put_contents('upload/' . $_POST['name'], $_POST['data']); 

それだけでPHP file_put_contents機能を使用してファイルを書き込みます。

私の問題は、アップロードされたファイルが壊れていて、元のファイルとサイズが違うことです(サイズが大きくなります)。

私は同じファイルを読み込み、file_put_contentsを使って再度書き込む機能を使用しようとしましたが、結果ファイルは元のファイルと同じで、同じでした。

私はその後から来た文字列と私に与え二つの文字列とstrcmpを使用して2つの文字列を比較する(ファイルリーダーのfile_get_contentsから来ているものから来るもの)を、比較してみましたfileReaderは、file_get_contentsからのものより大きい。

readAsText機能を使用しているときに、私のコードの問題と、このようにFileReaderを使用してファイルをアップロードする方法について教えてください。

+0

ファイルをアップロードするときに 'enctype'が正しく設定されていることを確認するには、[' FormData'](https://developer.mozilla.org/en-US/docs/Web/API/FormData)APIを使用する必要があります – apokryfos

+0

Iそれを使用しようとしましたが、塗りつぶされず(動作しないで追加されます)、送信を妨げるエラーが発生します。 –

答えて

0

PHPで間違ったコレクションを使用しています。アップロードされたファイルストリームにアクセスするには、$_FILESを使用してください。 こちらをご覧ください: http://php.net/manual/en/reserved.variables.files.php
、ここで:要するにhttp://php.net/manual/en/features.file-upload.post-method.php

を、PHPランタイムは一時フォルダにローカルに格納し、HTTPリクエストからのアップロード・ストリームを読み込むの世話をし、あなたがアクセスするために上記のマップを公開します一時ファイルを作成し、別の場所に移動することもできます(または、他の場所で行う必要があります)。

+0

問題は、AJAXとFileReaderを使用してその問題を解決したいということです。ファイルを文字列に変換することは間違った方法ではなく、正しく動作するはずです。私はここでの問題は、結果の文字列の一部を削除しなければならないと思うが、何を削除すべきか分からない。 –

+0

または、私はこのメソッドを使用していますが、ファイルは$ _postにない$ _fileで利用できるはずですか? –

+0

ファイルを文字列に変換するのは、明らかにテキストファイルでしか動作しないため、文字セットのエンコーディングを考慮する必要があります。クライアント/ブラウザとサーバーで同じである必要があります。私は個人的には絶対にこのルートを辿ることはありません.AJAXを介してファイルをアップロードする "適切な"ライブラリがたくさんあるので、アップロードするためにファイルを文字列に変換するのは本当にハックです。 –

関連する問題