ฉันต้องอัปโหลดเฉพาะไฟล์ภาพผ่าน<input type="file">
แท็ก
ตอนนี้ยอมรับไฟล์ทุกประเภท แต่ผมต้องการที่จะ จำกัด ไว้เฉพาะนามสกุลไฟล์รูปภาพเท่านั้นที่เฉพาะเจาะจงซึ่งรวมถึง.jpg
, .gif
ฯลฯ
ฉันจะใช้ฟังก์ชันนี้ได้อย่างไร
ฉันต้องอัปโหลดเฉพาะไฟล์ภาพผ่าน<input type="file">
แท็ก
ตอนนี้ยอมรับไฟล์ทุกประเภท แต่ผมต้องการที่จะ จำกัด ไว้เฉพาะนามสกุลไฟล์รูปภาพเท่านั้นที่เฉพาะเจาะจงซึ่งรวมถึง.jpg
, .gif
ฯลฯ
ฉันจะใช้ฟังก์ชันนี้ได้อย่างไร
คำตอบ:
ใช้แอตทริบิวต์acceptของแท็กอินพุต ดังนั้นในการยอมรับเฉพาะ PNGs, JPEGs และ GIF คุณสามารถใช้รหัสต่อไปนี้:
<input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />
หรือเพียงแค่:
<input type="file" name="myImage" accept="image/*" />
โปรดทราบว่านี่เป็นเพียงคำแนะนำแก่เบราว์เซอร์ว่าไฟล์ประเภทใดที่จะแสดงต่อผู้ใช้ แต่สิ่งนี้สามารถหลีกเลี่ยงได้ง่ายดังนั้นคุณควรตรวจสอบความถูกต้องของไฟล์ที่อัพโหลดบนเซิร์ฟเวอร์ด้วยเช่นกัน
มันควรจะทำงานใน IE 10+, Chrome, Firefox, Safari 6+, Opera 15+ แต่การสนับสนุนนั้นคร่าวๆในโทรศัพท์มือถือ (จนถึงปี 2015) และจากรายงานบางอย่างนี้อาจป้องกันไม่ให้เบราว์เซอร์มือถือบางตัวอัปโหลดอะไรเลย อย่าลืมทดสอบแพลตฟอร์มเป้าหมายของคุณด้วย
สำหรับการสนับสนุนเบราว์เซอร์โดยละเอียดโปรดดูที่http://caniuse.com/#feat=input-file-accept
accept="file/csv, file/xls"
ใช้ได้หรือไม่?
image/x-png
เหรอ image/png
ตามรายการนี้ก็เป็นเพียง iana.org/assignments/media-types/media-types.xhtml
ใช้สิ่งนี้:
<input type="file" accept="image/*">
ใช้ได้ทั้ง FF และ Chrome
ใช้มันแบบนี้
<input type="file" accept=".png, .jpg, .jpeg" />
มันใช้งานได้สำหรับฉัน
ขั้นตอน:
1. เพิ่มคุณสมบัติการยอมรับให้กับแท็กอินพุต
2. ตรวจสอบกับ javascript
3. เพิ่มการตรวจสอบความถูกต้องฝั่งเซิร์ฟเวอร์เพื่อตรวจสอบว่าเนื้อหาเป็นไฟล์ประเภทที่คาดหวังจริงๆ
สำหรับ HTML และ javascript:
<html>
<body>
<input name="image" type="file" id="fileName" accept=".jpg,.jpeg,.png" onchange="validateFileType()"/>
<script type="text/javascript">
function validateFileType(){
var fileName = document.getElementById("fileName").value;
var idxDot = fileName.lastIndexOf(".") + 1;
var extFile = fileName.substr(idxDot, fileName.length).toLowerCase();
if (extFile=="jpg" || extFile=="jpeg" || extFile=="png"){
//TO DO
}else{
alert("Only jpg/jpeg and png files are allowed!");
}
}
</script>
</body>
</html>
คำอธิบาย:
สามารถทำได้โดย
<input type="file" accept="image/*" />
แต่นี่ไม่ใช่วิธีที่ดี คุณต้องโค้ดที่ฝั่งเซิร์ฟเวอร์เพื่อตรวจสอบไฟล์รูปภาพหรือไม่
ตรวจสอบว่าไฟล์ภาพเป็นภาพจริงหรือภาพปลอม
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
}
else {
echo "File is not an image.";
$uploadOk = 0;
}
}
สำหรับการอ้างอิงเพิ่มเติมดูที่นี่
http://www.w3schools.com/tags/att_input_accept.asp
http://www.w3schools.com/php/php_file_upload.asp
คุณสามารถใช้accept
แอตทริบิวต์สำหรับ<input type="file">
อ่านเอกสารนี้ได้ที่http://www.w3schools.com/tags/att_input_accept.asp
การใช้ type = "file" และ accept = "image / *" (หรือรูปแบบที่คุณต้องการ) อนุญาตให้ผู้ใช้เลือกไฟล์ที่มีรูปแบบเฉพาะ แต่คุณต้องตรวจสอบอีกครั้งในฝั่งไคลเอ็นต์เนื่องจากผู้ใช้สามารถเลือกไฟล์ประเภทอื่นได้ มันใช้งานได้สำหรับฉัน
<input #imageInput accept="image/*" (change)="processFile(imageInput)" name="upload-photo" type="file" id="upload-photo" />
จากนั้นในสคริปต์จาวาสคริปต์ของคุณ
processFile(imageInput) {
if (imageInput.files[0]) {
const file: File = imageInput.files[0];
var pattern = /image-*/;
if (!file.type.match(pattern)) {
alert('Invalid format');
return;
}
// here you can do whatever you want with your image. Now you are sure that it is an image
}
}
const file: File = imageInput.files[0];
หรือไม่: นอกจากนี้การกำหนด id ให้กับอินพุตไม่ได้กระทำในลักษณะปกติ
หากคุณต้องการอัปโหลดหลายภาพพร้อมกันคุณสามารถเพิ่มแอmultiple
ททริบิวให้ป้อนได้
upload multiple files: <input type="file" multiple accept='image/*'>