티스토리 뷰
1. entype을 multipart/form-data로 지정해줘야 $_FILE로 받을수있다
upload.php (html 파일)
<form enctype='multipart/form-data' method='post'>
<label for="fileUpload" class="form-label">첨부파일</label>
<div id="fileUpload">
<div class="file0">
<div type="button" class="btn btn-default btn-file col-sm-2">파일선택</div>
<input type="hidden" name="file_unlink[]">
<input class="form-control-file" type="file" id="file_0" name="file_0" data-type="file">
</div>
</div>
</form>
2. 업로드 커스텀
$(".btn-file").click(function () {
var $input_file = $(this).parent().children('input');
$input_file.click();
});
3.가져온 파일을 처리해주기
upload_create.php
$(function(){
var data = new FormData(); // file형식으로 넘길 data변수생성
var form_data = $("form").serializeArray(); // form내부 모든값 object로 받아오기
// 배열로 뽑혀진 form_data를 k(0,1,2,3,4) 와v({name:"id",value"value"})로 나눠준다
$.each(form_data, function (k, v) {
// data에 배열값으로 나온form_data의 v의 name value를 data에 추가시켜준다
data.append(v.name, v.value);
});
for (var i = 0; i < file.length; i++) {
// 서버에 업로드된 파일을 Formdata로 생성된 data에 진짜파일을 넣어준다
data.append('file_' + i, $('[data-type="file"]')[i].files[0]);
}
//ajax시작
$.ajax({
type: 'post',
url: '../upload_create.php',
data: data,
contentType: false, // 파일전송시 해당부분이 없으면 파일이 안넘어간다
processData: false, // 파일전송시 해당부분이 없으면 파일이 안넘어간다
success: function (data) {
alert('업로드성공');
},
error: function () {
alert('오류');
}
});
})
----
upload_create.php
include "db_conn.php"; // 디비연결후
foreach ($_FILES as $key => $value) {
$path = "/upload/"; //저장될 폴더명
$upload_dir = $_SERVER["DOCUMENT_ROOT"] . $path; //저장될 경로
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0707, true); //폴더가없으면 만들고
chmod($upload_dir, 0777); //만들었으면 권한변경
}
$file_name = strtolower(end(explode('/', $_FILES[$key]['name']))); // 파일명 추출
$file_ext = strtolower(substr(strrchr($file_name, "."), 1)); // 파일 확장자
$file_size = $_FILES[$key]['size']; // 파일 사이즈는 파일크기 제한할때만 사용
$new_file_name = '';
do {
//파일명이 겹치면 안되니 변경시켜주고
$new_file_name = str_replace(" ", "", str_replace('.', '', microtime())) . "." . $file_ext;
//같은 파일명이 없으면 통과 파일명이 겹치면 윗줄코드 재실행
if (!file_exists($upload_dir . "/" . $new_file_name)) {
break;
}
} while (1);
$uploadfile = $upload_dir . "/" . basename($new_file_name); //파일업로드될경로와 파일명조합
//제일 중요한 함수 ,tmp에 저장된 파일을 서버에저장
if (move_uploaded_file($_FILES[$key]['tmp_name'], $uploadfile)) {
$query_img .= "$key='$path" . "$new_file_name' ,"; //디비쿼리
$query_img .= "$key" . '_org' . " ='$file_name' ,"; //디비쿼리
}
}
//디비에 저장
$query_file = " insert upload_file set ";
$query_file .= $query_img;
$query_file .= " created_at=now()";
mysql_query($query_file, $db_conn);
-----끝
move_uploaded_file( 서버에 등록된 파일 , 실서버에 옮길(업로드할) 파일경로);
수정,삭제할땐 서버가 터지지않게 unlink('파일경로'); 를 이용하여 이전파일을 삭제해주자
$file_unlink = $_POST['file_unlink'];
$i = explode('_', $key);
unlink($_SERVER['DOCUMENT_ROOT'] . $file_unlink[$i[1]]);
'php' 카테고리의 다른 글
php 파일 다운로드 (0) | 2020.02.07 |
---|