반응형
여러 파일 업로드 Jquery/Ajax 진행률 표시
저는 여러 파일을 올릴 수 있는 업로드 양식을 가지고 있습니다.파일 크기가 꽤 크다면 프로그레스 바가 좋을 것 같습니다.아래는 나의 소스코드 입니다.저는 jquery를 처음 접합니다. 저는 그냥 php이지만 ajax가 더 사용자 친화적이라는 것을 알게 되었습니다.
<div id="new_upload">
<div class="close_btn"></div>
<div id="uploads"></div>
<form action="global.func/file_upload.php" method="post" enctype="multipart/form-data" id="upload_file">
<fieldset><legend>Upload an image or video</legend>
<input type="file" id="file" name="file[]" placeholder="Upload Image or Video" multiple /><input type="submit" value="upload file" id="upload_file_btn" required />
</fieldset>
<div class="bar">
<div class="bar_fill" id="pb">
<div class="bar_fill_text" id="pt"></div>
</div>
</div>
</form>
</div>
<script>
function OnProgress(event, position, total, percentComplete){
//Progress bar
console.log(total);
$('#pb').width(percentComplete + '%') //update progressbar percent complete
$('#pt').html(percentComplete + '%'); //update status text
}
function beforeSubmit(){
console.log('ajax start');
}
function afterSuccess(data){
console.log(data);
}
$(document).ready(function(e) {
$('#upload_file').submit(function(event){
event.preventDefault();
var filedata = document.getElementById("file");
formdata = new FormData();
var i = 0, len = filedata.files.length, file;
for (i; i < len; i++) {
file = filedata.files[i];
formdata.append("file[]", file);
}
formdata.append("json",true);
$.ajax({
url: "global.func/file_upload.php",
type: "POST",
data: formdata,
processData: false,
contentType: false,
dataType:"JSON",
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
return myXhr;
},
beforeSubmit: beforeSubmit,
uploadProgress:OnProgress,
success: afterSuccess,
resetForm: true
});
});
});
</script>
이미지 업로드는 잘 되고 배열은 ajax로 보내지만 프로그레스 바는 움직이지 않습니다.실제로 need to production 이라는 두 함수의 console.log도 나타나지 않습니다.이 프로그레스 바를 작동시킬 수 있는 내 ajax 요청의 함수를 호출하는 올바른 방법이 있습니까?
제출 전: 제출 전: 업로드 진행률:진행 중, 성공: 성공 후,
콘솔에 데이터가 표시될 때 'success: after Success' 기능이 작동합니다.
이것은 당신의 HTML 양식입니다.
<form method="post" action="uploadImages.php" name ='photo' id='imageuploadform' enctype="multipart/form-data">
<input hidden="true" id="fileupload" type="file" name="image[]" multiple >
<div id ="divleft">
<button id="btnupload"></button>
</div>
</form>
여기는 당신의 JQuery와 axis입니다.기본적으로 fileInput은 숨겨집니다.
업로드 버튼 클릭
$("#btnupload").click(function(e) {
$("#fileupload").click();
e.preventDefault();
});
$('#fileupload').change(function (e) {
$("#imageuploadform").submit();
e.preventDefault();
});
$('#imageuploadform').submit(function(e) {
var formData = new FormData(this);
$.ajax({
type:'POST',
url: 'ajax/uploadImages',
data:formData,
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
myXhr.upload.addEventListener('progress',progress, false);
}
return myXhr;
},
cache:false,
contentType: false,
processData: false,
success:function(data){
console.log(data);
alert('data returned successfully');
},
error: function(data){
console.log(data);
}
});
e.preventDefault();
});
function progress(e){
if(e.lengthComputable){
var max = e.total;
var current = e.loaded;
var Percentage = (current * 100)/max;
console.log(Percentage);
if(Percentage >= 100)
{
// process completed
}
}
}
당신의 php 코드는 다음과 같습니다.
<?php
header('Content-Type: application/json');
$valid_exts = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions
$max_size = 30000 * 1024; // max file size in bytes
$json = array();
if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
{
for($i=0;$i<count($_FILES['image']['tmp_name']);$i++)
{
$path="image/uploads/photos/";
if(is_uploaded_file($_FILES['image']['tmp_name'][$i]) )
{
// get uploaded file extension
$ext = strtolower(pathinfo($_FILES['image']['name'][$i], PATHINFO_EXTENSION));
// looking for format and size validity
if (in_array($ext, $valid_exts) AND $_FILES['image']['size'][$i] < $max_size)
{
// unique file path
$uid = uniqid();
$date = date('Y-m-d-H-i-s');
$path = $path ."image_" .$date. '_' . $uid . "." .$ext;
$returnJson[]= array("filepath"=>$path);
$filename = "image_" . $date . "_" .$uid . "." . $ext;
$this->createthumb($i,$filename);
// move uploaded file from temp to uploads directory
if (move_uploaded_file($_FILES['image']['tmp_name'][$i], $path))
{
//$status = 'Image successfully uploaded!';
//perform sql updates here
}
else {
$status = 'Upload Fail: Unknown error occurred!';
}
}
else {
$status = 'Upload Fail: Unsupported file format or It is too large to upload!';
}
}
else {
$status = 'Upload Fail: File not uploaded!';
}
}
}
else {
$status = 'Bad request!';
}
echo json_encode($json);
?>
AJAX 및 jQuery를 사용하려면 사용자 지정 XMLHtpRequest를 사용해야 합니다.여기 예가 있습니다.비동기식으로 파일을 업로드하려면 어떻게 해야 합니까?
언급URL : https://stackoverflow.com/questions/23219033/show-a-progress-on-multiple-file-upload-jquery-ajax
반응형
'programing' 카테고리의 다른 글
이미지 보기에 첨부된 비트맵 가져오기 (0) | 2023.09.08 |
---|---|
How To Speed Up VBA Code (0) | 2023.09.08 |
VBA에서 사전을 매개 변수로 통과하려면 어떻게 해야 합니까? (0) | 2023.09.08 |
Excel select a value from a cell having row number calculated (0) | 2023.09.08 |
MySQL(MariaDB)에서 큰 테이블에 인덱스를 만드는 데 시간이 매우 오래 걸립니다. (0) | 2023.09.08 |