There are generally two ways to upload files:
There are two types:
1. Standard input form method, typically using $_FILES to receive;
2. Transmit in Base64 format, usually AJAX asynchronous upload.
The first type
The standard input form method is suitable for uploading large files and supports batch processing. A few key sentences of html code:
<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>
Different names:
<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>
Where enctype="multipart/form-data" is essential for file upload. In addition, type="file" sets the input type, and accept="image/*" specifies priority in uploading images (MIME reference manual). Multiple supports selecting multiple files at one time, and pic[] receives multiple files in the form of an array. The mobile terminal can also add the parameter capture="camera" to select the camera to take pictures and upload them.
Backend processing:
Get uploaded files through $_FILES.
$files = $_FILES;
When transferring multiple files, if the names are different, the format of the returned $_FILES array will be different.
When the names are the same:
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) } } }
When the names are different:
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) } }
When performing foreach traversal on $_FILES, the previous output format is not very convenient. The latter can be traversed directly. We can write a method for unified conversion:
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; }
Okay, I talked about how the backend processes the received $_FILES array and converts it into a unified format. The next tasks are mainly:
1. Check whether the uploaded file is illegal;
2. Check whether the uploaded file exceeds the size;
3. Check whether the saved path exists and whether it is writable;
4. File rename;
A very important function is used in the upload process: move_uploaded_file(filename, $destination) to perform file moving operations. Move $_FILES['id_pic']['tmp_name'] to the new path. Of course, before moving, you can use is_uploaded_file($_FILES['id_pic']['tmp_name']) to determine whether the file is uploaded normally.
Multiple file uploads use move_uploaded_file() multiple times in a loop to perform moving operations.
Second type
Mainly upload pictures.
Use the change event of the input to process the image (such as compression) with canvas, and then send the file stream to the backend via ajax.
The basic principle is to render the image through canvas, and then compress and save it into a base64 string through the toDataURL method (can be compiled into a jpg format image).
Backend processing:
The backend will eventually receive the base64 string sent by the frontend, and then process the string into an image. Specifically, please use the keyword base64 to image development language for Google|Baidu. There is a base64Len in the result generated by the front end, which is the length of the string, and the back end should check to confirm whether the submission is complete.
//php示例: $img = base64_decode($_POST['img']); $img = imagecreatefromstring($img);
The above is the entire content of this article, I hope it will be helpful to everyone’s study.