2017-12-04 18 views
0

js 파일 판독기와 AJAX를 사용하여 파일을 내 서버에 업로드하려고합니다.js fileReader를 사용하여 파일을 업로드하면 파일이 손상됩니다.

FileAPIfileReader을 사용하여 파일을 읽고 문자열로 변환 한 다음 AJAX 요청을 통해 서버로 보냈습니다.

다음
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 기능을 사용하여 파일을 작성 은 여기 내 클라이언트 측 JS 코드입니다.

내 문제는 업로드 된 파일이 손상되어 원본 파일 (크기가 더 크다)과 크기가 다른 것입니다.

동일한 파일을 읽고 file_put_contents을 사용하여 다시 쓰는 함수 인 PHP file_get_contents을 사용해 보았는데 결과 파일이 원래 파일과 동일하고 똑같습니다.

나는 다음 문자열에서 온 것을 말해 준다, 두 문자열합니다 ( 파일 리더file_get_contents에서 오는 하나에서 오는 하나)을 비교하기 위해 노력하고 strcmp를 사용하여 두 개의 문자열을 비교 fileReaderfile_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를 통해 "적절한"파일 업로드를하는 라이브러리가 많기 때문에 업로드하기 위해 파일을 문자열로 변환하는 것은 실제로 해킹입니다. –