我正在嘗試使用 FormData 發送一堆影像,但當然,我無法發送 FileList 并且我沒有找到發送這些檔案的方法。我已經嘗試過自己尋找答案,但大多數人建議附加每個檔案。
for (let i = 0 ; i < images.length ; i ) {
formData.append("images[]", images[i]);
}
但它最終只有 formData 中的最后一個檔案,由于某種原因,以前的檔案被下一個檔案替換。
我還嘗試將 FileList 轉換為一個陣列,這行得通,但我不知道如何分離這些檔案,現在每個檔案都在一個鍵中作為字串。
0: "[{\"lastModified\":1606255989000,\"lastModifiedDate\":\"undefined\",\"name\":\"logo.png\",\"size\":54438,\"type\":\"image/png\"},{\"lastModified\":1606255979000,\"lastModifiedDate\":\"undefined\",\"name\":\"logo1.png\",\"size\":58023,\"type\":\"image/png\"},{\"lastModified\":1606252752000,\"lastModifiedDate\":\"undefined\",\"name\":\"logo2.png\",\"size\":28147,\"type\":\"image/png\"},{\"lastModified\":1606255121000,\"lastModifiedDate\":\"undefined\",\"name\":\"logo3.png\",\"size\":18260,\"type\":\"image/png\"}]"
我可以將它轉換為字串并使用}每個條目的 as 和 end將其剪切為自己的鍵。我不想這樣做,即使我的經驗很少,我也知道這不是一個好方法。
到目前為止,我的 javascript 代碼如下所示。
File.prototype.toObject = function () {
return Object({
lastModified: parseInt(this.lastModified),
lastModifiedDate: String(this.lastModifiedDate),
name: String(this.name),
size: parseInt(this.size),
type: String(this.type)
})
}
FileList.prototype.toArray = function () {
return Array.from(this).map(function (file) {
return file.toObject()
})
}
let files = document.getElementById('files').files
let filesArray = files.toArray();
let formData = new FormData();
formData.append('images[]', JSON.stringify(filesArray));
然后我像這樣發送這些資料
fetch('<?=env('app.baseURL')?>/admin/gallery', {
method: 'POST',
processData: false,
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
body: formData,
data: formData,
}).then(function (response) {...rest of the code...})
發送此資料后,收到的沒有任何問題,我想保存這些檔案,但我不能不先將它們分開。我在后端使用 PHP。
我對 javascript 沒有太多經驗,所以我可能會遺漏一些明顯的東西,任何幫助表示贊賞。
uj5u.com熱心網友回復:
在您的 for 回圈中,您可以為 formData 追加使用動態名稱。例如:
formData.append(`image-${i}`, images[i])
或者,如果您想將影像推送到 formData 中的單個鍵值對,就像在您的示例中一樣,您應該使用 getAll() 方法來檢索影像。
formData.getAll('images[]')
uj5u.com熱心網友回復:
這是遍歷包含影像的陣列的 PHP 代碼:
<?php
if(isset($_FILES) && isset($_FILES['images'])){
$countfiles = count($_FILES['images']['name']);
for($i=0;$i<$countfiles;$i ){
$filename = $_FILES['images']['name'][$i];
$sql = "INSERT INTO myimages (filename) VALUES ('".$filename."')";
$db->query($sql);
move_uploaded_file($_FILES['images']['tmp_name'][$i],'upload/'.$filename);
}
}
?>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/374275.html
標籤:javascript php 代码点火器 表单数据 文件列表
上一篇:選擇標簽未顯示所選選項
下一篇:注銷時會話未設定
