如何以不同的名称上传多个文件
How to get multiple file upload with different name
我要上传多个文件并获取要上传的文件名:
我要上传 type_demand 一些 type_file
例如:对于 type_demand A 我可以上传 type_file X, Y, Z
在我的 php 中,我想获取 3 个文件并知道 X、Y 和 Z 是什么。
这是我的表单示例:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"
enctype="multipart/form-data">
<label for="type">Files to upload:</label>
<div class="form-group row">
<label for="FormControlFile1" class="col-sm-2 col-form-label">X</label>
<input type="file" class="form-control-file col-sm-10" id="FormControlFile1" name="myfile[]">
</div>
<div class="form-group row">
<label for="FormControlFile2" class="col-sm-2 col-form-label">Y</label>
<input type="file" class="form-control-file col-sm-10" id="FormControlFile2" name="myfile[]">
</div>
<div class="form-group row">
<label for="FormControlFile3" class="col-sm-2 col-form-label">Z</label>
<input type="file" class="form-control-file col-sm-10" id="FormControlFile3" name="myfile[]">
</div>
</div>
<button type="submit" class="btn btn-primary" name="upload">Upload</button>
</form>
这是我的 php 代码:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_FILES['myfile'])){
$tmp_arr= $_FILES['myfile'];
}
// Create an array with desired structure.
for($i=0; $i<count($tmp_arr['name']); $i++){
$files[] = array(
'name' => $tmp_arr['name'][$i],
'type' => $tmp_arr['type'][$i],
'tmpName' => $tmp_arr['tmp_name'][$i],
'error' => $tmp_arr['error'][$i],
'size' => $tmp_arr['size'][$i],
//i want to have another information here to know if it's X, Y or Z file
);
}
foreach($files as $file){
echo '<br/>'.$file['name'] .' is for :' ;
}
我想要的结果例如:
NameOfFile1 用于:X
NameOfFile2 用于:Y
NameOfFile3 用于:Z
谢谢
您应该能够将名称(在合理范围内您想要的任何名称)分配给 HTML 中的字段,因为您已经在使用 array style
语法。例如:
<?php
$field='myfile';
$errors=array();
if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_FILES[ $field ] ) ){
$obj=$_FILES[ $field ];
foreach( $obj['name'] as $index => $void ){
/*
$index refers to the name assign in `myfile['fieldname']`
*/
$name=$obj['name'][ $index ];
$tmp=$obj['tmp_name'][ $index ];
$error=$obj['error'][ $index ];
$type=$obj['type'][ $index ];
$size=$obj['size'][ $index ];
$ext=strtolower(pathinfo($name,PATHINFO_EXTENSION));
// do stuff...
printf(
'
<h1>%s</h1>
<pre>%s</pre>
',
$index,
print_r($obj,true)
);
//next
}
}
?>
和修改后的 HTML 以包含 X,Y & Z
作为名称。 ID 已删除,元素位于标签本身内,因为这意味着更少 HTML 代码。
<form method="post" enctype="multipart/form-data">
<fieldset>
<legend>Files to upload:</legend>
<div class="form-group row">
<label class="col-sm-2 col-form-label">
X : <input type="file" class="form-control-file col-sm-10" name="myfile[X]">
</label>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">
Y: <input type="file" class="form-control-file col-sm-10" name="myfile[Y]">
</label>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">
Z: <input type="file" class="form-control-file col-sm-10" name="myfile[Z]">
</label>
</div>
</fieldset>
<button type="submit" class="btn btn-primary" name="upload">Upload</button>
</form>
无需重新发明轮子。
jQuery File Upload Plugin(由 heyageek 编写)可以满足您的所有需求,并且体积最小且经过时间考验。 (我已经成功使用多年了)
请注意,他有 client side (jQuery) and for the server (PHP) 的示例代码。
您需要查看 formData
and/or dynamicFormData
功能,这些功能允许您在提交之前收集其他数据并将它们(与上传的文件一起)发送到您的后端处理文件.
dynamicFormData: function()
{
//var data ="XYZ=1&ABCD=2";
var data ={"XYZ":1,"ABCD":2};
return data;
}
这里有一个 sample upload script 将向您展示如何获取已上传文件的名称(参见第 18 行):
$fileName = $_FILES["myfile"]["name"];
请注意 myfile
与 javascript ajax 块中的文件名匹配:
<script>
$(document).ready(function()
{
$("#fileuploader").uploadFile({
url:"YOUR_FILE_UPLOAD_URL",
fileName:"myfile"
});
});
</script>
研究“入门”选项卡和“服务器端”(PHP 文件,最上面)上的示例,您将在几分钟内解决所有问题。
参考
这是另一个使用插件的例子:PHP file upload inside modal window
我要上传多个文件并获取要上传的文件名:
我要上传 type_demand 一些 type_file
例如:对于 type_demand A 我可以上传 type_file X, Y, Z
在我的 php 中,我想获取 3 个文件并知道 X、Y 和 Z 是什么。
这是我的表单示例:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"
enctype="multipart/form-data">
<label for="type">Files to upload:</label>
<div class="form-group row">
<label for="FormControlFile1" class="col-sm-2 col-form-label">X</label>
<input type="file" class="form-control-file col-sm-10" id="FormControlFile1" name="myfile[]">
</div>
<div class="form-group row">
<label for="FormControlFile2" class="col-sm-2 col-form-label">Y</label>
<input type="file" class="form-control-file col-sm-10" id="FormControlFile2" name="myfile[]">
</div>
<div class="form-group row">
<label for="FormControlFile3" class="col-sm-2 col-form-label">Z</label>
<input type="file" class="form-control-file col-sm-10" id="FormControlFile3" name="myfile[]">
</div>
</div>
<button type="submit" class="btn btn-primary" name="upload">Upload</button>
</form>
这是我的 php 代码:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_FILES['myfile'])){
$tmp_arr= $_FILES['myfile'];
}
// Create an array with desired structure.
for($i=0; $i<count($tmp_arr['name']); $i++){
$files[] = array(
'name' => $tmp_arr['name'][$i],
'type' => $tmp_arr['type'][$i],
'tmpName' => $tmp_arr['tmp_name'][$i],
'error' => $tmp_arr['error'][$i],
'size' => $tmp_arr['size'][$i],
//i want to have another information here to know if it's X, Y or Z file
);
}
foreach($files as $file){
echo '<br/>'.$file['name'] .' is for :' ;
}
我想要的结果例如:
NameOfFile1 用于:X
NameOfFile2 用于:Y
NameOfFile3 用于:Z
谢谢
您应该能够将名称(在合理范围内您想要的任何名称)分配给 HTML 中的字段,因为您已经在使用 array style
语法。例如:
<?php
$field='myfile';
$errors=array();
if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_FILES[ $field ] ) ){
$obj=$_FILES[ $field ];
foreach( $obj['name'] as $index => $void ){
/*
$index refers to the name assign in `myfile['fieldname']`
*/
$name=$obj['name'][ $index ];
$tmp=$obj['tmp_name'][ $index ];
$error=$obj['error'][ $index ];
$type=$obj['type'][ $index ];
$size=$obj['size'][ $index ];
$ext=strtolower(pathinfo($name,PATHINFO_EXTENSION));
// do stuff...
printf(
'
<h1>%s</h1>
<pre>%s</pre>
',
$index,
print_r($obj,true)
);
//next
}
}
?>
和修改后的 HTML 以包含 X,Y & Z
作为名称。 ID 已删除,元素位于标签本身内,因为这意味着更少 HTML 代码。
<form method="post" enctype="multipart/form-data">
<fieldset>
<legend>Files to upload:</legend>
<div class="form-group row">
<label class="col-sm-2 col-form-label">
X : <input type="file" class="form-control-file col-sm-10" name="myfile[X]">
</label>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">
Y: <input type="file" class="form-control-file col-sm-10" name="myfile[Y]">
</label>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">
Z: <input type="file" class="form-control-file col-sm-10" name="myfile[Z]">
</label>
</div>
</fieldset>
<button type="submit" class="btn btn-primary" name="upload">Upload</button>
</form>
无需重新发明轮子。
jQuery File Upload Plugin(由 heyageek 编写)可以满足您的所有需求,并且体积最小且经过时间考验。 (我已经成功使用多年了)
请注意,他有 client side (jQuery) and for the server (PHP) 的示例代码。
您需要查看 formData
and/or dynamicFormData
功能,这些功能允许您在提交之前收集其他数据并将它们(与上传的文件一起)发送到您的后端处理文件.
dynamicFormData: function()
{
//var data ="XYZ=1&ABCD=2";
var data ={"XYZ":1,"ABCD":2};
return data;
}
这里有一个 sample upload script 将向您展示如何获取已上传文件的名称(参见第 18 行):
$fileName = $_FILES["myfile"]["name"];
请注意 myfile
与 javascript ajax 块中的文件名匹配:
<script>
$(document).ready(function()
{
$("#fileuploader").uploadFile({
url:"YOUR_FILE_UPLOAD_URL",
fileName:"myfile"
});
});
</script>
研究“入门”选项卡和“服务器端”(PHP 文件,最上面)上的示例,您将在几分钟内解决所有问题。
参考
这是另一个使用插件的例子:PHP file upload inside modal window