Javascript'te yeni FormData() Nesnesi ve Çoklu Dosya Gönderimi

Bu new FormData(), yeni bir FormData nesnesi oluşturan bir JavaScript oluşturucu işlevidir. FormData nesnesi, öncelikle HTML formlarından gelen verileri işlemek için kullanılır ve AJAX veya getirme istekleri aracılığıyla verileri kolayca oluşturmanıza ve sunucuya göndermenize olanak tanır.

Javascript'te yeni FormData() Nesnesi

Yeni bir FormData nesnesi oluşturduğunuzda new FormData(), isteğe bağlı olarak bir HTML form öğesine bir başvuruyu argüman olarak geçirebilirsiniz. Bir form öğesi sağlanırsa, oluşturucu otomatik olarak metin girdileri, onay kutuları, radyo düğmeleri ve dosya girdileri gibi formun tüm giriş alanlarını toplar ve bunları FormData nesnesine ekler.

İşte form öğesi olmadan yeni bir FormData nesnesi oluşturmaya dair bir örnek:

var formData = new FormData();
   

Ve işte form öğesiyle yeni bir FormData nesnesi oluşturmaya dair bir örnek:

var formElement = document.getElementById('myForm');
var formData = new FormData(formElement);
   

Bir FormData nesneniz olduğunda, . gibi yöntemleri kullanarak ek veriler ekleyerek onu düzenleyebilirsiniz append(). Bu, FormData nesnesine anahtar-değer çiftleri eklemenize olanak tanır; burada anahtar, alan adını ve değer, alan değerini temsil eder.

fetch()FormData nesneleri genellikle verileri sunucuya eşzamansız olarak göndermek için XMLHttpRequest işleviyle birlikte kullanılır . HTTP isteğinin bir parçası olarak dosyalar da dahil olmak üzere form verilerini paketlemek ve iletmek için kolay bir yol sağlarlar.

1.Tek bir anahtar-değer çifti ekleme:

var formData = new FormData();
formData.append('username', 'johnsmith');
   

Bu örnekte, “username” anahtarı ve “johnsmith” değeri FormData nesnesine eklenir.

2. Birden fazla anahtar-değer çifti ekleme:

var formData = new FormData();
formData.append('username', 'johnsmith');
formData.append('email', 'john@example.com');
formData.append('age', 25);
   

3. Bir dosya ekleme:

var formData = new FormData();
var fileInput = document.getElementById('fileInput');
var file = fileInput.files[0];
formData.append('file', file);
   

Bu örnekte, bir dosya giriş öğesi seçilir ve seçilen dosya FormData nesnesine eklenir. Bu, dosyaları form verilerinizin bir parçası olarak yüklemenize olanak tanır.

4. Aynı anahtar için bir değer dizisi ekleme:

var formData = new FormData();
var colors = ['red', 'blue', 'green'];
for (var i = 0; i < colors.length; i++) {
  formData.append('color', colors[i]);
}
   

Burada, bir renk dizisi üzerinde yineleme yapılır ve her renk FormData nesnesine aynı anahtar "color" ile eklenir. Bu, aynı alan adı için birden fazla değer göndermek istediğinizde yararlı olabilir.

Bu örnekler, FormData'daki yöntemin bazı yaygın kullanımlarını göstermektedir append(). Form verileriyle çalışırken bunları kendi özel ihtiyaçlarınıza ve gereksinimlerinize uyacak şekilde uyarlayabilirsiniz.

 
$( "#form1" ).on( "submit", function( event ) {
  event.preventDefault();

  var payload = $( this ).serialize() );
  // this will create a  method creates a text string in standard URL-encoded notation

  // Now we will add additional parameter id in our payload
  // Method 1:  By simply appending to the url string
  payload+ "&id=" + 12

  // Method 2: If you are using Arrays() ,You need to use serializeArray()  Then you can use
  var formData = $('#contact_form').serializeArray();
  formData.push({ name: "<something>", value: "<somevalue>" });

  // Method 3: By serializeObject
  var payload = $JQ("#moveFolderForm").serializeObject();
  payload.id = 1;

});
 
 
 
 
Çoklu Dosya Yüklemeleri Nerelerde Yardımcı Olabilir?

Çoklu dosya yüklemeleri, web uygulamalarında geniş bir uygulanabilirliğe sahiptir ve kullanıcıların dosya işlemeyi gerektiren hemen hemen her görev için kullanıcı deneyimini ve verimliliğini artırır: Resim Galerileri ve Portföyleri, belge yönetim sistemleri (sözleşmeler, faturalar, raporlar, vb.), Youtube ve Vimeo gibi video paylaşım platformları, bulut depolama hizmetleri (AWS S3 ve benzeri) ve tabii ki kullanıcıların resim eklemesini gerektiren hemen hemen her kullanım durumu için çevrimiçi formlar.

Bu kılavuzda iki şey öğreneceksiniz. İlk olarak, JavaScript kullanarak birden fazla resim ve videoyu nasıl yükleyebileceğinizi göreceğiz ve ardından, kullanıcıların daha kolay, daha güvenli ve ayrıntılı bir şekilde resim ve video yüklemelerine olanak tanıyan SDK'lar ve API'ler sağlayan güçlü ve kullanımı kolay bir Dijital Varlık Yönetim sistemi olan ImageKit'i kullanarak daha hızlı ve daha akıcı bir yaklaşımı keşfedeceğiz.

JavaScript Kullanarak Birden Fazla Dosya Yükleme

Öncelikle dosyalarımızı JavaScript aracılığıyla, dosya yüklemelerini yönetebilen bir sunucuya nasıl yükleyeceğimizi ele alalım.

Birden fazla girdi öğesi içeren bir HTML formu oluşturarak başlayacağız, ardından kullanıcı tarafından seçilen dosyaları yakalamak için olay dinleyicileri ekleyeceğiz. Dosyaları ve meta verilerini yeni bir FormData nesnesinde depolayacağız, ardından son olarak dosyaları yüklemek için XMLHttpRequest aracılığıyla sunucuya bir AJAX isteği göndereceğiz.

İşte inşa edeceğimiz şey bu.

????
Yükleme isteğini alan sunucunun dosya yüklemelerini işleyebileceği varsayılır. Bu makale, dosya yüklemelerini işlemek ve verileri işlemek için sunucu tarafı kodunu kapsamaz.
 
Adım 1: Çoklu dosya seçimlerine izin veren bir dosya giriş öğesi içeren bir HTML formu oluşturun
<form id="uploadForm" enctype="multipart/form-data">
  <input type="file" id="fileInput" name="files[]" multiple accept="image/*,video/*"/>
  <button type="button" id="uploadButton">Upload Files</button>
</form>
   

Sağlanan HTML kodu, kullanıcıların birden fazla dosya seçmesine izin veren bir dosya giriş öğesiyle basit bir form oluşturur. " " olarak ayarlanan enctype özelliği öğelerin gerçekten dosya verisi yüklemesini multipart/form-datasağlar , öğedeki multiple niteliği çoklu dosya seçimini etkinleştirir ve isteğe bağlı olarak accept özelliğini ve olarak ayarlamak kullanıcının yalnızca bu türlerdeki dosyaları yüklemesine izin verir.<input><input type="file">“image/*”“video/*”

Adım 2: Dosya seçimini yakalamak için bir olay dinleyicisi ekleyin
// Add event listener to the button element
const uploadButton = document.getElementById("uploadButton");
uploadButton.addEventListener("click", uploadFiles);
   

Formumuzun yükleme düğmesine tıklandığında, olay dinleyicisi, "uploadFiles"dosyaları yüklemeye hazırlamak ve sunucuya göndermek de dahil olmak üzere dosya yükleme sürecini yönetmekten sorumlu olan işlevi tetikleyecektir. Şimdi bu işlevi kodlayalım.

Adım 3: Dosyaları Depolamak İçin FormData'yı Kullanın
function uploadFiles(event) {
  event.preventDefault();
  const fileInput = document.getElementById("fileInput");
  const selectedFiles = fileInput.files;
  // Check if any files are selected
  if (selectedFiles.length === 0) {
    alert("Please select at least one file to upload.");
    return;
  }
   
}

Öncelikle seçilen dosyaları alıyoruz (hiçbir dosyanın seçilmediği durumu kapsayacak şekilde bazı hata işleme mantığıyla).

Daha sonra bunları depolamak için JavaScript FormData nesnesini kullanırız .

 
function uploadFiles() {
  // Create a FormData object to store the form data
  const formData = new FormData();
  // Append each selected file to the FormData object
  for (let i = 0; i < selectedFiles.length; i++) {
    formData.append("files[]", selectedFiles[i]);
  }
}
 
 
 
 

Artık dosyalarımız AJAX isteğiyle sunucuya gönderilmeye hazır.

FormData'yı spread operatörünü kullanarak console.log'unda gösterebilirsiniz.

// Display the FormData structure
console.log([...formData])
   

FormData'nın şu şekilde yapılandırıldığını göreceksiniz:

[  
  ["files[]",    [object File] ],
  ["files[]",    [object File] ],
  ["files[]",    [object File] ]
]

Bir dizi tuple, ilk çifti “files[]” adlı bir anahtar ve değeri bir File nesnesi. Bu çiftteki değerin içeriğini görmek için şunun gibi bir şey yapabiliriz:

// Display full FormData content
  for (const pair of formData.entries()) {
    console.log(
      pair[0],
      pair[1].name + ", " + pair[1].size + ", " + pair[1].type + ", " + pair[1].lastModifiedDate
    );
  }
   

Artık, yükleme için seçtiğiniz dosyalara tam olarak ne olduğunu görebileceksiniz. Bu formData nesnesi, her dosyanın bayt cinsinden boyutunu, MIME türünü ve en son ne zaman değiştirildiğine dair zaman damgasını içerir.

files[], vacation-1.jpg, 297796, image/jpeg, 2023-08-28T23:39:30.657Z
files[], vacation-lossless.png, 699409, image/png, 2023-08-24T18:00:32.000Z
files[], funny-cat.mp4, 421208, video/mp4, 2023-08-22T17:53:14.218Z
   

Bu verileri bir AJAX isteği olarak gönderdiğimizde, bu dizi üzerinde yineleme yaparak her dosyayı yükleme uç noktanıza tek tek gönderir.

Adım 4: XMLHttpRequest kullanarak AJAX isteğini gönderin
const xhr = new XMLHttpRequest();
xhr.open("POST", "/uploadFiles", true);
xhr.onreadystatechange = function () {
  if (xhr.readyState === XMLHttpRequest.DONE) {
    if (xhr.status === 200) {
       // Handle successful response from the server
      console.log('Files uploaded successfully!');
      alert("Files uploaded successfully!");
    } else {
       // Handle error response from the server
      console.error('Failed to upload files.');
     alert("Error occurred during file upload. Please try again.");
    }
  }
};
xhr.send(formData);
XMLHttpRequest nesnesi AJAX isteğini oluşturur ve gönderir . İstek yöntemi "POST" olarak ayarlanır, URL dosya yüklemelerini işleyen uç noktaya işaret eder ( “/uploadFiles"bu durumda sunucudaki uç noktaya ulaşıyoruz ) ve FormData nesnemiz gönderilen istek yüküdür. 
Serialize,  Dosya ve Özel Datayı Aynı Anda Yollamak İçin
var data = new FormData();

//Form data
var form_data = $('#my_form').serializeArray();
$.each(form_data, function (key, input) {
    data.append(input.name, input.value);
});

//File data
var file_data = $('input[name="my_images"]')[0].files;
for (var i = 0; i < file_data.length; i++) {
    data.append("my_images[]", file_data[i]);
}

//Custom data
data.append('key', 'value');

$.ajax({
    url: "URL",
    method: "post",
    processData: false,
    contentType: false,
    data: data,
    success: function (data) {
        //success
    },
    error: function (e) {
        //error
    }
});

 

veya

$.ajax({
    url: "ajax.php",
    type: "POST",            
    data: new FormData('form'),
    contentType: false,      
    cache: false,            
    processData:false,
    success: function(data) {
        $("#response").html(data);
    }
});

 

  JQuery İle POST
$.ajax({
                type: "POST",
                url: 'index.php',
                data: formdata,
                dataType: "html",
                contentType: false, //olması şart
                processData: false, //olması şart
                beforeSend: function () {
                },
                success: function (data) {
                }
            }).done(function () {
            });

 

 

Kaynak

 

Yorumunuzu Ekleyin
Yükleniyor...
Yükleniyor...