jQuery AJAX 파일 업로드 PHP
PHPjQuery AJAX 파일 업로드 PHP
가능한 가장 작은 설정으로 인트라넷 페이지에 간단한 파일 업로드를 구현하려고합니다.
이것은 내 HTML 부분입니다.
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
이것은 JS JS 스크립트입니다.
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
"users"및 "IIS_users"에 대한 변경 권한이있는 웹 사이트의 루트 디렉토리에 "uploads"라는 폴더가 있습니다.
파일 형식으로 파일을 선택하고 업로드 버튼을 누르면 첫 번째 경고는 "[object FormData]"를 반환합니다. 두 번째 경고가 호출되지 않으며 "업로드"폴더도 비어 있습니다.
누군가가 내 발견을 도울 수 있습니까?
또한 다음 단계는 서버 측 생성 이름으로 파일의 이름을 바꾸는 것입니다. 어쩌면 누군가 나에게 이것에 대한 해결책을 줄 수있을 것입니다.
해결법
-
==============================
1.
파일을 uploads 디렉토리로 이동하려면 서버에서 실행되는 스크립트가 필요합니다. 브라우저에서 실행중인 jQuery ajax 메소드는 양식 데이터를 서버로 전송 한 다음 서버의 스크립트가 업로드를 처리합니다. 다음은 PHP를 사용하는 예제입니다.
HTML은 괜찮지 만 다음과 같이 JS jQuery 스크립트를 업데이트하십시오.
$('#upload').on('click', function() { var file_data = $('#sortpicture').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); alert(form_data); $.ajax({ url: 'upload.php', // point to server-side PHP script dataType: 'text', // what to expect back from the PHP script, if anything cache: false, contentType: false, processData: false, data: form_data, type: 'post', success: function(php_script_response){ alert(php_script_response); // display response from the PHP script, if any } }); });
그리고 이제 서버 측 스크립트에서 PHP를 사용합니다.
upload.php : 서버에서 실행되고 uploads 디렉토리로 파일을 보내는 PHP 스크립트 :
<?php if ( 0 < $_FILES['file']['error'] ) { echo 'Error: ' . $_FILES['file']['error'] . '<br>'; } else { move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']); } ?>
또한 대상 디렉토리에 대한 몇 가지 사항은 다음과 같습니다.
그리고 upload.php 스크립트에서 사용되는 PHP 함수 move_uploaded_file에 관해서는 조금 :
move_uploaded_file( // this is where the file is temporarily stored on the server when uploaded // do not change this $_FILES['file']['tmp_name'], // this is where you want to put the file and what you want to name it // in this case we are putting in a directory called "uploads" // and giving it the original filename 'uploads/' . $_FILES['file']['name'] );
$ _FILES [ 'file'] [ 'name']은 업로드되는 파일의 이름입니다. 당신은 그것을 사용할 필요가 없습니다. 파일에 원하는 이름 (서버 파일 시스템 호환)을 지정할 수 있습니다.
move_uploaded_file( $_FILES['file']['tmp_name'], 'uploads/my_new_filename.whatever' );
마지막으로 PHP upload_max_filesize 및 post_max_size 구성 값을 알고 테스트 파일이 둘 중 하나를 초과하지 않도록하십시오. 다음은 PHP 구성을 확인하는 방법과 max filesize 및 post settings를 설정하는 방법에 대한 도움말입니다.
-
==============================
2.
var formData = new FormData($("#YOUR_FORM_ID")[0]); $.ajax({ url: "upload.php", type: "POST", data : formData, processData: false, contentType: false, beforeSend: function() { }, success: function(data){ }, error: function(xhr, ajaxOptions, thrownError) { console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } });
-
==============================
3.
이것은 업로드 된 파일을받는 PHP 파일입니다.
<? $data = array(); //check with your logic if (isset($_FILES)) { $error = false; $files = array(); $uploaddir = $target_dir; foreach ($_FILES as $file) { if (move_uploaded_file($file['tmp_name'], $uploaddir . basename( $file['name']))) { $files[] = $uploaddir . $file['name']; } else { $error = true; } } $data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' => $files); } else { $data = array('success' => 'NO FILES ARE SENT','formData' => $_REQUEST); } echo json_encode($data); ?>
-
==============================
4.
**1. index.php** <body> <span id="msg" style="color:red"></span><br/> <input type="file" id="photo"><br/> <script type="text/javascript" src="jquery-3.2.1.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $(document).on('change','#photo',function(){ var property = document.getElementById('photo').files[0]; var image_name = property.name; var image_extension = image_name.split('.').pop().toLowerCase(); if(jQuery.inArray(image_extension,['gif','jpg','jpeg','']) == -1){ alert("Invalid image file"); } var form_data = new FormData(); form_data.append("file",property); $.ajax({ url:'upload.php', method:'POST', data:form_data, contentType:false, cache:false, processData:false, beforeSend:function(){ $('#msg').html('Loading......'); }, success:function(data){ console.log(data); $('#msg').html(data); } }); }); }); </script> </body> **2.upload.php** <?php if($_FILES['file']['name'] != ''){ $test = explode('.', $_FILES['file']['name']); $extension = end($test); $name = rand(100,999).'.'.$extension; $location = 'uploads/'.$name; move_uploaded_file($_FILES['file']['tmp_name'], $location); echo '<img src="'.$location.'" height="100" width="100" />'; }
-
==============================
5.
Materialize로 Jquery Ajax를 사용하여 최상의 파일 업로드 다운로드 하시려면 여기를 클릭하세요
이미지를 선택하면 이미지가 기본 64로 변환되어 데이터베이스에 저장할 수 있으므로 가벼운 무게가됩니다.
from https://stackoverflow.com/questions/23980733/jquery-ajax-file-upload-php by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
YouTube API에서 YouTube 동영상 미리보기 이미지를 얻으려면 어떻게해야합니까? (0) | 2018.09.02 |
---|---|
PHP_excel의 대안 (0) | 2018.09.02 |
다음 페이지로 PHP Pass 변수 전달 (0) | 2018.09.02 |
닫기 태그를 생략하는 이유는 무엇입니까? (0) | 2018.09.02 |
Long-Polling, 웹 소켓, SSE (Server-Sent Events) 및 Comet이란 무엇입니까? (0) | 2018.09.02 |