我想上傳多個檔案并獲取要上傳的檔案名:
我有一個 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
謝謝
uj5u.com熱心網友回復:
由于您已經在使用array style語法,因此您應該能夠將名稱(在合理范圍內您想要的任何名稱)分配給 HTML 中的欄位。例如:
<?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>
uj5u.com熱心網友回復:
無需重新發明輪子。
在jQuery的檔案上傳插件(由heyageek)做所有你想要和是最小的,經過時間考驗的。(我已經成功使用它多年了)
請注意,他有客戶端(jQuery) 和服務器(PHP) 的示例代碼。
您將需要查看formData和/或dynamicFormData功能,它們允許您在提交之前收集其他資料并將它們(連同上傳的檔案)發送到您的后端處理檔案。
dynamicFormData: function()
{
//var data ="XYZ=1&ABCD=2";
var data ={"XYZ":1,"ABCD":2};
return data;
}
這是一個示例上傳腳本,它將向您展示如何獲取已上傳檔案的名稱(參見第 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352918.html
