Tôi muốn tải lên nhiều tệp và lưu trữ chúng trong một thư mục và lấy đường dẫn và lưu trữ trong cơ sở dữ liệu ... Bất kỳ ví dụ điển hình nào bạn đã tìm kiếm khi thực hiện tải lên nhiều tệp ...
Lưu ý: Tệp có thể thuộc bất kỳ loại nào ...
Tôi muốn tải lên nhiều tệp và lưu trữ chúng trong một thư mục và lấy đường dẫn và lưu trữ trong cơ sở dữ liệu ... Bất kỳ ví dụ điển hình nào bạn đã tìm kiếm khi thực hiện tải lên nhiều tệp ...
Lưu ý: Tệp có thể thuộc bất kỳ loại nào ...
Câu trả lời:
Tôi biết đây là một bài đăng cũ nhưng một số giải thích thêm có thể hữu ích cho ai đó đang cố gắng tải lên nhiều tệp ... Đây là những gì bạn cần làm:
name="inputName[]"
multiple="multiple"
hoặc chỉmultiple
"$_FILES['inputName']['param'][index]"
array_filter()
trước khi đếm.Đây là một ví dụ khó hiểu (chỉ hiển thị mã có liên quan)
HTML:
<input name="upload[]" type="file" multiple="multiple" />
PHP:
//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.
// Count # of uploaded files in array
$total = count($_FILES['upload']['name']);
// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$tmpFilePath = $_FILES['upload']['tmp_name'][$i];
//Make sure we have a file path
if ($tmpFilePath != ""){
//Setup our new file path
$newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
//Handle other code here
}
}
}
Hy vọng điều này sẽ giúp ích!
<input type="file">
cho phép thuộc tính multiple
- kết quả mong đợi sẽ như thế nào? Trình duyệt cho phép nhiều tệp được chọn?
multiple
thuộc tính của yếu tố đầu vào là boolean, có nghĩa là bạn không cung cấp cho nó một giá trị: <input name="upload[]" type="file" multiple />
Xem spec HTML5: w3.org/TR/2011/WD-html5-20110525/...
Nhiều tệp có thể được chọn và sau đó được tải lên bằng
<input type='file' name='file[]' multiple>
tập lệnh php mẫu thực hiện việc tải lên:
<html>
<title>Upload</title>
<?php
session_start();
$target=$_POST['directory'];
if($target[strlen($target)-1]!='/')
$target=$target.'/';
$count=0;
foreach ($_FILES['file']['name'] as $filename)
{
$temp=$target;
$tmp=$_FILES['file']['tmp_name'][$count];
$count=$count + 1;
$temp=$temp.basename($filename);
move_uploaded_file($tmp,$temp);
$temp='';
$tmp='';
}
header("location:../../views/upload.php");
?>
</html>
Các tệp đã chọn được nhận dưới dạng một mảng với
$_FILES['file']['name'][0]
lưu trữ tên của tệp đầu tiên.
$_FILES['file']['name'][1]
lưu trữ tên của tệp thứ hai.
và như thế.
HTML
tạo div với id='dvFile'
;
tạo ra một button
;
onclick
của chức năng gọi nút đó add_more()
JavaScript
function add_more() {
var txt = "<br><input type=\"file\" name=\"item_file[]\">";
document.getElementById("dvFile").innerHTML += txt;
}
PHP
if(count($_FILES["item_file"]['name'])>0)
{
//check if any file uploaded
$GLOBALS['msg'] = ""; //initiate the global message
for($j=0; $j < count($_FILES["item_file"]['name']); $j++)
{ //loop the uploaded file array
$filen = $_FILES["item_file"]['name']["$j"]; //file name
$path = 'uploads/'.$filen; //generate the destination path
if(move_uploaded_file($_FILES["item_file"]['tmp_name']["$j"],$path))
{
//upload the file
$GLOBALS['msg'] .= "File# ".($j+1)." ($filen) uploaded successfully<br>";
//Success message
}
}
}
else {
$GLOBALS['msg'] = "No files found to upload"; //No file upload message
}
Bằng cách này, bạn có thể thêm tệp / hình ảnh, tùy theo yêu cầu và xử lý chúng thông qua tập lệnh php.
fileInput.value
, nhưng tôi nhận thấy rằng khi nhiều tệp được chọn fileInput.value
vẫn chỉ xuất ra một đường dẫn ...
Nó không khác gì so với tải lên một tệp - $_FILES
là một mảng chứa bất kỳ và tất cả các tệp đã tải lên.
Có một chương trong hướng dẫn sử dụng PHP: Tải lên nhiều tệp
Nếu bạn muốn cho phép tải lên nhiều tệp với sự lựa chọn dễ dàng từ phía người dùng (chọn nhiều tệp cùng một lúc thay vì điền vào các trường tải lên), hãy xem SWFUpload . Tuy nhiên, nó hoạt động khác với biểu mẫu tải lên tệp thông thường và yêu cầu Flash hoạt động. SWFUpload đã bị loại bỏ cùng với Flash. Kiểm tra các câu trả lời khác, mới hơn để có phương pháp tiếp cận đúng.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$max_no_img=4; // Maximum number of images value to be set here
echo "<form method=post action='' enctype='multipart/form-data'>";
echo "<table border='0' width='400' cellspacing='0' cellpadding='0' align=center>";
for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name='images[]' class='bginput'></td></tr>";
}
echo "<tr><td colspan=2 align=center><input type=submit value='Add Image'></td></tr>";
echo "</form> </table>";
while(list($key,$value) = each($_FILES['images']['name']))
{
//echo $key;
//echo "<br>";
//echo $value;
//echo "<br>";
if(!empty($value)){ // this will check if any blank field is entered
$filename =rand(1,100000).$value; // filename stores the value
$filename=str_replace(" ","_",$filename);// Add _ inplace of blank space in file name, you can remove this line
$add = "upload/$filename"; // upload directory path is set
//echo $_FILES['images']['type'][$key]; // uncomment this line if you want to display the file type
//echo "<br>"; // Display a line break
copy($_FILES['images']['tmp_name'][$key], $add);
echo $add;
// upload the file to the server
chmod("$add",0777); // set permission to the file.
}
}
?>
</body>
</html>
Đơn giản là, chỉ cần đếm mảng tệp trước, sau đó trong vòng lặp while bạn có thể dễ dàng thực hiện điều này như
$count = count($_FILES{'item_file']['name']);
bây giờ bạn có tổng số tệp đúng.
Trong vòng lặp while làm như thế này:
$i = 0;
while($i<$count)
{
Upload one by one like we do normally
$i++;
}
kịch bản đơn giản này đã làm việc cho tôi.
<?php
foreach($_FILES as $file){
//echo $file['name'];
echo $file['tmp_name'].'</br>';
move_uploaded_file($file['tmp_name'], "./uploads/".$file["name"]);
}
?>
Đây là một hàm tôi đã viết trả về một $_FILES
mảng dễ hiểu hơn .
function getMultiple_FILES() {
$_FILE = array();
foreach($_FILES as $name => $file) {
foreach($file as $property => $keys) {
foreach($keys as $key => $value) {
$_FILE[$name][$key][$property] = $value;
}
}
}
return $_FILE;
}
Tôi chạy vòng lặp foreach với phần tử lỗi, trông giống như
foreach($_FILES['userfile']['error'] as $k=>$v)
{
$uploadfile = 'uploads/'. basename($_FILES['userfile']['name'][$k]);
if (move_uploaded_file($_FILES['userfile']['tmp_name'][$k], $uploadfile))
{
echo "File : ", $_FILES['userfile']['name'][$k] ," is valid, and was successfully uploaded.\n";
}
else
{
echo "Possible file : ", $_FILES['userfile']['name'][$k], " upload attack!\n";
}
}
Chỉ cần xem qua giải pháp sau:
http://www.mydailyhacks.org/2014/11/05/php-multifile-uploader-for-php-5-4-5-5/
nó là một Tập lệnh tải lên nhiều tệp PHP sẵn sàng với một biểu mẫu mà bạn có thể thêm nhiều đầu vào và thanh tiến trình AJAX. Nó sẽ hoạt động trực tiếp sau khi giải nén trên máy chủ ...
Chúng tôi có thể dễ dàng tải lên nhiều tệp bằng php bằng cách sử dụng tập lệnh bên dưới.
Tải xuống mã nguồn đầy đủ và xem trước
<?php
if (isset($_POST['submit'])) {
$j = 0; //Variable for indexing uploaded image
$target_path = "uploads/"; //Declaring Path for uploaded images
for ($i = 0; $i < count($_FILES['file']['name']); $i++) {//loop to get individual element from the array
$validextensions = array("jpeg", "jpg", "png"); //Extensions which are allowed
$ext = explode('.', basename($_FILES['file']['name'][$i]));//explode file name from dot(.)
$file_extension = end($ext); //store extensions in the variable
$target_path = $target_path . md5(uniqid()) . "." . $ext[count($ext) - 1];//set the target path with a new name of image
$j = $j + 1;//increment the number of uploaded images according to the files in array
if (($_FILES["file"]["size"][$i] < 100000) //Approx. 100kb files can be uploaded.
&& in_array($file_extension, $validextensions)) {
if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $target_path)) {//if file moved to uploads folder
echo $j. ').<span id="noerror">Image uploaded successfully!.</span><br/><br/>';
} else {//if file was not moved.
echo $j. ').<span id="error">please try again!.</span><br/><br/>';
}
} else {//if file size and file type was incorrect.
echo $j. ').<span id="error">***Invalid file Size or Type***</span><br/><br/>';
}
}
}
?>
$property_images = $_FILES['property_images']['name'];
if(!empty($property_images))
{
for($up=0;$up<count($property_images);$up++)
{
move_uploaded_file($_FILES['property_images']['tmp_name'][$up],'../images/property_images/'.$_FILES['property_images']['name'][$up]);
}
}
Đây là những gì làm việc cho tôi. Tôi phải tải lên tệp, lưu trữ tên tệp và tôi có thêm inof từ các trường đầu vào để lưu trữ và một bản ghi cho mỗi tên tệp. Tôi đã sử dụng serialize () sau đó thêm nó vào truy vấn sql chính.
class addReminder extends dbconn {
public function addNewReminder(){
$this->exdate = $_POST['exdate'];
$this->name = $_POST['name'];
$this->category = $_POST['category'];
$this->location = $_POST['location'];
$this->notes = $_POST['notes'];
try {
if(isset($_POST['submit'])){
$total = count($_FILES['fileUpload']['tmp_name']);
for($i=0;$i<$total;$i++){
$fileName = $_FILES['fileUpload']['name'][$i];
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
$newFileName = md5(uniqid());
$fileDest = 'filesUploaded/'.$newFileName.'.'.$ext;
$justFileName = $newFileName.'.'.$ext;
if($ext === 'pdf' || 'jpeg' || 'JPG'){
move_uploaded_file($_FILES['fileUpload']['tmp_name'][$i], $fileDest);
$this->fileName = array($justFileName);
$this->encodedFileNames = serialize($this->fileName);
var_dump($this->encodedFileNames);
}else{
echo $fileName . ' Could not be uploaded. Pdfs and jpegs only please';
}
}
$sql = "INSERT INTO reminders (exdate, name, category, location, fileUpload, notes) VALUES (:exdate,:name,:category,:location,:fileName,:notes)";
$stmt = $this->connect()->prepare($sql);
$stmt->bindParam(':exdate', $this->exdate);
$stmt->bindParam(':name', $this->name);
$stmt->bindParam(':category', $this->category);
$stmt->bindParam(':location', $this->location);
$stmt->bindParam(':fileName', $this->encodedFileNames);
$stmt->bindParam(':notes', $this->notes);
$stmt->execute();
}
}catch(PDOException $e){
echo $e->getMessage();
}
}
}
Liên kết tốt đẹp trên:
Tải lên một tệp PHP với nhiều giải thích cơ bản khác nhau .
Tải lên nhiều tệp PHP với xác thực Nhấp vào đây để tải xuống mã nguồn
PHP / jQuery Tải lên nhiều tệp với thanh tiến trình và xác thực (Nhấp vào đây để tải xuống mã nguồn)
Cách tải lên tệp trong PHP và lưu trữ trong cơ sở dữ liệu MySql (Nhấp vào đây để tải xuống mã nguồn)
extract($_POST);
$error=array();
$extension=array("jpeg","jpg","png","gif");
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name)
{
$file_name=$_FILES["files"]["name"][$key];
$file_tmp=$_FILES["files"]["tmp_name"][$key];
$ext=pathinfo($file_name,PATHINFO_EXTENSION);
if(in_array($ext,$extension))
{
if(!file_exists("photo_gallery/".$txtGalleryName."/".$file_name))
{
move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$file_name);
}
else
{
$filename=basename($file_name,$ext);
$newFileName=$filename.time().".".$ext;
move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$newFileName);
}
}
else
{
array_push($error,"$file_name, ");
}
}
và bạn phải kiểm tra mã HTML của mình
<form action="create_photo_gallery.php" method="post" enctype="multipart/form-data">
<table width="100%">
<tr>
<td>Select Photo (one or multiple):</td>
<td><input type="file" name="files[]" multiple/></td>
</tr>
<tr>
<td colspan="2" align="center">Note: Supported image format: .jpeg, .jpg, .png, .gif</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Create Gallery" id="selectedButton"/></td>
</tr>
</table>
</form>
Liên kết tốt đẹp trên:
Tải lên một tệp PHP với nhiều giải thích cơ bản khác nhau .
Tải lên nhiều tệp PHP với xác thực Nhấp vào đây để tải xuống mã nguồn
PHP / jQuery Tải lên nhiều tệp với thanh tiến trình và xác thực (Nhấp vào đây để tải xuống mã nguồn)
Cách tải lên tệp trong PHP và lưu trữ trong cơ sở dữ liệu MySql (Nhấp vào đây để tải xuống mã nguồn)