.NET을 사용하여 단일 파일 업로드로이 작업을 수행 한 경험이 <input type="file">
있습니다. 그러나 한 번에 여러 개를 업로드하는 데 문제가 있습니다.
예를 들어 일련의 이미지를 선택한 다음 한 번에 서버에 업로드 할 수 있기를 원합니다.
가능하면 단일 파일 입력 컨트롤을 사용하는 것이 좋습니다.
누구든지 이것을 수행하는 방법을 알고 있습니까? 감사!
.NET을 사용하여 단일 파일 업로드로이 작업을 수행 한 경험이 <input type="file">
있습니다. 그러나 한 번에 여러 개를 업로드하는 데 문제가 있습니다.
예를 들어 일련의 이미지를 선택한 다음 한 번에 서버에 업로드 할 수 있기를 원합니다.
가능하면 단일 파일 입력 컨트롤을 사용하는 것이 좋습니다.
누구든지 이것을 수행하는 방법을 알고 있습니까? 감사!
답변:
이것은 HTML5 에서 가능합니다 . 예 (PHP 5.4) :
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="my_file[]" multiple>
<input type="submit" value="Upload">
</form>
<?php
if (isset($_FILES['my_file'])) {
$myFile = $_FILES['my_file'];
$fileCount = count($myFile["name"]);
for ($i = 0; $i < $fileCount; $i++) {
?>
<p>File #<?= $i+1 ?>:</p>
<p>
Name: <?= $myFile["name"][$i] ?><br>
Temporary file: <?= $myFile["tmp_name"][$i] ?><br>
Type: <?= $myFile["type"][$i] ?><br>
Size: <?= $myFile["size"][$i] ?><br>
Error: <?= $myFile["error"][$i] ?><br>
</p>
<?php
}
}
?>
</body>
</html>
파일 대화 상자에서 2 개 항목을 선택한 후 Chrome에서 다음과 같이 표시됩니다.
다음은 "업로드"버튼을 클릭 한 후의 모습입니다.
이것은 완전히 작동하는 대답의 스케치입니다. PHP에서 파일 업로드 를 적절하고 안전하게 처리하는 방법에 대한 자세한 내용 은 PHP 매뉴얼 : 파일 업로드 처리를 참조하십시오 .
multiple="multiple"
합니까 , 아니면 통과해야 합니까?
여러 파일 업로드를 만들기 위해해야 할 몇 가지 작업이 있습니다. 실제로는 매우 기본적인 것입니다. Java, Ajax, Flash를 사용할 필요가 없습니다. 다음으로 시작하는 일반 파일 업로드 양식을 작성하십시오.
<form enctype="multipart/form-data" action="post_upload.php" method="POST">
그렇다면 성공의 열쇠입니다.
<input type="file" name="file[]" multiple />
그 괄호를 잊지 마세요! post_upload.php에서 다음을 시도하십시오.
<?php print_r($_FILES['file']['tmp_name']); ?>
tmp_name 데이터가있는 배열을 얻습니다. 즉, 파일 'number'예제에서 세 번째 대괄호 쌍으로 각 파일에 액세스 할 수 있습니다.
$_FILES['file']['tmp_name'][0]
php count ()를 사용하여 선택한 파일 수를 계산할 수 있습니다. Goodluck widdit!
foreach
문 ... 업로드 된 파일의 수를 몰라도
Firefox 5의 전체 솔루션 :
<html>
<head>
</head>
<body>
<form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" >
<input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input>
</form>
<?php
echo "No. files uploaded : ".count($_FILES['infile']['name'])."<br>";
$uploadDir = "images/";
for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {
echo "File names : ".$_FILES['infile']['name'][$i]."<br>";
$ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1);
// generate a random new file name to avoid name conflict
$fPath = md5(rand() * time()) . ".$ext";
echo "File paths : ".$_FILES['infile']['tmp_name'][$i]."<br>";
$result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);
if (strlen($ext) > 0){
echo "Uploaded ". $fPath ." succefully. <br>";
}
}
echo "Upload complete.<br>";
?>
</body>
</html>
<html> <head> </head> <body> <form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" > <input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input> </form>
찾아보기를 선택할 때 표시되는 파일 선택기 대화 상자에서 여러 파일을 선택하려는 경우 대부분 운이 좋지 않습니다. Java 애플릿 또는 이와 유사한 것을 사용해야합니다 (작은 플래시 파일을 사용하는 것이 있다고 생각합니다. 찾으면 업데이트하겠습니다). 현재 단일 파일 입력은 단일 파일 만 선택할 수 있습니다.
여러 파일 입력을 사용하는 것에 대해 이야기하고 있다면 하나를 사용하는 것과 큰 차이가 없어야합니다. 코드를 게시하면 더 많은 도움을 드리겠습니다.
업데이트 : 플래시를 사용하는 단일 '찾아보기'버튼을 사용하는 한 가지 방법이 있습니다. 나는 이것을 개인적으로 사용한 적이 없지만 그것에 대해 상당한 양을 읽었습니다. 최선의 기회라고 생각합니다.
먼저 다음과 같은 형식을 만들어야합니다.
<form method="post" enctype="multipart/form-data" >
<input type="file" name="file[]" multiple id="file"/>
<input type="submit" name="ok" />
</form>
맞아 그거야 . 이제이 코드를 양식 코드 아래 또는 원하는 페이지에 추가하십시오.
<?php
if(isset($_POST['ok']))
foreach ($_FILES['file']['name'] as $filename) {
echo $filename.'<br/>';
}
?>
간단 해 ... 끝
<form action="" method="POST" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="file[]" multiple/>
<input type="submit" name="submit" value="Upload Image" />
</form>
FOR 루프 사용
<?php
$file_dir = "uploads";
if (isset($_POST["submit"])) {
for ($x = 0; $x < count($_FILES['file']['name']); $x++) {
$file_name = $_FILES['file']['name'][$x];
$file_tmp = $_FILES['file']['tmp_name'][$x];
/* location file save */
$file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */
if (move_uploaded_file($file_tmp, $file_target)) {
echo "{$file_name} has been uploaded. <br />";
} else {
echo "Sorry, there was an error uploading {$file_name}.";
}
}
}
?>
FOREACH 루프 사용
<?php
$file_dir = "uploads";
if (isset($_POST["submit"])) {
foreach ($_FILES['file']['name'] as $key => $value) {
$file_name = $_FILES['file']['name'][$key];
$file_tmp = $_FILES['file']['tmp_name'][$key];
/* location file save */
$file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */
if (move_uploaded_file($file_tmp, $file_target)) {
echo "{$file_name} has been uploaded. <br />";
} else {
echo "Sorry, there was an error uploading {$file_name}.";
}
}
}
?>
여러 이미지를 업로드하는 데 사용되는 PHP 함수를 만들었습니다.이 기능은 특정 폴더에 여러 이미지를 업로드 할 수있을뿐만 아니라 다음 코드에서 데이터베이스에 레코드를 저장할 수 있습니다. $ arrayimage는 양식 메모를 통해 전송되는 이미지의 배열입니다. 업로드는 여러 개를 사용할 수 없지만 버튼 클릭시 파일 unput의 동적 추가 필드를 설정할 수있는 것과 동일한 이름으로 다른 입력 필드를 만들어야합니다.
$ dir은 이미지를 저장할 디렉토리입니다. $ fields는 데이터베이스에 저장할 필드의 이름입니다.
데이터베이스 이미지 저장소와 ID, 이름, 주소와 같은 필드 이름이있는 경우 데이터베이스 필드는 배열 형식이어야합니다. 그러면 다음과 같은 데이터를 게시해야합니다.
$fields=array("id"=$_POST['idfieldname'], "name"=$_POST['namefield'],"address"=$_POST['addressfield']);
그런 다음 해당 필드를 $ fields 함수에 전달합니다.
$ table은 데이터를 저장할 테이블의 이름입니다 ..
function multipleImageUpload($arrayimage,$dir,$fields,$table)
{
//extracting extension of uploaded file
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $arrayimage["name"]);
$extension = end($temp);
//validating image
if ((($arrayimage["type"] == "image/gif")
|| ($arrayimage["type"] == "image/jpeg")
|| ($arrayimage["type"] == "image/jpg")
|| ($arrayimage["type"] == "image/pjpeg")
|| ($arrayimage["type"] == "image/x-png")
|| ($arrayimage["type"] == "image/png"))
//check image size
&& ($arrayimage["size"] < 20000000)
//check iamge extension in above created extension array
&& in_array($extension, $allowedExts))
{
if ($arrayimage["error"] > 0)
{
echo "Error: " . $arrayimage["error"] . "<br>";
}
else
{
echo "Upload: " . $arrayimage["name"] . "<br>";
echo "Type: " . $arrayimage["type"] . "<br>";
echo "Size: " . ($arrayimage["size"] / 1024) . " kB<br>";
echo "Stored in: ".$arrayimage['tmp_name']."<br>";
//check if file is exist in folder of not
if (file_exists($dir."/".$arrayimage["name"]))
{
echo $arrayimage['name'] . " already exists. ";
}
else
{
//extracting database fields and value
foreach($fields as $key=>$val)
{
$f[]=$key;
$v[]=$val;
$fi=implode(",",$f);
$value=implode("','",$v);
}
//dynamic sql for inserting data into any table
$sql="INSERT INTO " . $table ."(".$fi.") VALUES ('".$value."')";
//echo $sql;
$imginsquery=mysql_query($sql);
move_uploaded_file($arrayimage["tmp_name"],$dir."/".$arrayimage['name']);
echo "<br> Stored in: " .$dir ."/ Folder <br>";
}
}
}
//if file not match with extension
else
{
echo "Invalid file";
}
}
//function imageUpload ends here
}
// imageFunctions 클래스는 여기서 끝납니다.
이 코드는 확장자를 가진 여러 이미지를 삽입하기 위해 시도 할 수 있습니다.이 기능은 이미지 파일을 확인하기 위해 생성됩니다. 코드에서 수직 파일에 대한 확장자 목록을 대체 할 수 있습니다.
부분 답변 : pear HTTP_UPLOAD는 http://pear.php.net/manual/en/package.http.http-upload.examples.php 유용 할 수 있습니다 .
여러 파일에 대한 전체 예제가 있습니다.