일반적으로 파일을 업로드하는 방법에는 두 가지가 있습니다.
두 가지 유형이 있습니다.
1. 일반적으로 $_FILES를 사용하여 수신하는 표준 입력 형식 방법;
2. Base64 모드로 전송하며 일반적으로 AJAX 비동기 업로드입니다.
첫 번째 유형
표준 입력 양식 방식은 대용량 파일 업로드에 적합하며 일괄 처리를 지원합니다. HTML 코드의 몇 가지 핵심 문장:
<form enctype="multipart/form-data" method="post" action="upload.php""> <input type="file" name="id_pic[]" accept="image/*" class="form-control" multiple /> <input type="submit" value="上传 " /> </form>
<form enctype="multipart/form-data" method="post" action="upload.php""> <input type="file" name="id_pic_1" accept="image/*" class="form-control" /> <input type="file" name="id_pic_2" accept="image/*" class="form-control" /> <input type="submit" value="上传 " /> </form>
백엔드 처리:
$_FILES를 통해 업로드된 파일을 가져옵니다.
$files = $_FILES;
여러 파일을 전송할 때 이름이 다르면 반환되는 $_FILES 배열의 형식도 달라집니다.
array(1) { ["id_pic"] => array(5) { ["name"] => array(2) { [0] => string(5) "1.jpg" [1] => string(5) "2.jpg" } ["type"] => array(2) { [0] => string(10) "image/jpeg" [1] => string(10) "image/jpeg" } ["tmp_name"] => array(2) { [0] => string(27) "C:\Windows\Temp\php7A7E.tmp" [1] => string(27) "C:\Windows\Temp\php7A7F.tmp" } ["error"] => array(2) { [0] => int(0) [1] => int(0) } ["size"] => array(2) { [0] => int(77357) [1] => int(56720) } } }
이름이 다른 경우:
array(2) { ["id_pic_1"] => array(5) { ["name"] => string(5) "1.jpg" ["type"] => string(10) "image/jpeg" ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEE.tmp" ["error"] => int(0) ["size"] => int(77357) } ["id_pic_2"] => array(5) { ["name"] => string(5) "2.jpg" ["type"] => string(10) "image/jpeg" ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp" ["error"] => int(0) ["size"] => int(56720) } }
function dealFiles($files) { $fileArray = array(); $n = 0; foreach ($files as $key=>$file){ if(is_array($file['name'])) { $keys = array_keys($file); $count = count($file['name']); for ($i=0; $i<$count; $i++) { $fileArray[$n]['key'] = $key; foreach ($keys as $_key){ $fileArray[$n][$_key] = $file[$_key][$i]; } $n++; } }else{ $fileArray = $files; break; } } return $fileArray; }
1. 업로드한 파일이 불법인지 확인하세요
2. 업로드한 파일이 용량을 초과하는지 확인하세요.
3. 저장된 경로가 존재하는지, 쓰기 가능한지 확인하세요.
4. 파일 이름 바꾸기
여러 파일 업로드는 이동 작업을 수행하기 위해 루프에서 move_uploaded_file()을 여러 번 사용합니다.
두 번째 유형
주로 사진을 업로드합니다.
입력의 변경 이벤트를 사용하여 캔버스로 이미지(예: 압축)를 처리한 다음 ajax를 통해 파일 스트림을 백엔드로 보냅니다.
백엔드 처리:
백엔드는 결국 프런트엔드에서 보낸 base64 문자열을 수신한 다음 해당 문자열을 이미지로 처리합니다. 구체적으로 Google|Baidu의 이미지 개발 언어에는 base64라는 키워드를 사용하세요. 프론트엔드에서 생성된 결과에는 문자열의 길이인 base64Len이 있는데, 백엔드는 제출이 완료되었는지 확인해야 합니다.
//php示例: $img = base64_decode($_POST['img']); $img = imagecreatefromstring($img);