Ana içeriğe atla

Drupal'de Servis ile Medya Oluşturma

Öncelikle bir medya oluşturmak için gereken şeyleri bilmeliyiz. Drupal'de medyalar dosyalardan oluşuyor. Yani bir medya oluşturmak için önce dosya oluşturmamız gerekiyor.

Drupalin içerisinde React kullandığımız bir projede servisle dosya oluşturmak gerekti. JSON API servislerini kullandık. Dosya oluşturmak için aşağıdaki kodu kullanabilirsiniz.

axios.post("/jsonapi/media/"+ mediaType +"/"+ mediaField, blob, 
{ 
   "withCredentials": true, 
   "headers": { 
      'Content-Type': 'application/octet-stream', 
      'Accept': 'application/vnd.api+json', 
      'X-CSRF-Token': csrf, 
      'Content-Disposition': 'file; filename="' + filename +'"', 
   } 
}) .then(res => { }); 

Servis sitenizin files klasörünün altına dosya oluşturmayı sağlıyor. Attığımız istekte body olarak gönderdiğimiz blob değişkeni dikkat çekiyor. Drupal servisleri ile URL olarak başka bir kaynaktan aldığımız stream edilmiş medyayı blob'a çevirerek gönderdiğimizde dosyayı oluşturabiliyoruz. Bunu da aşağıdaki şekilde yapıyoruz.

let blob = await fetch(url).then(r => r.blob()); 

Dosyamız oluşturulduğuna göre şimdi bu dosyanın id sini ve türünü kullanarak medyayı oluşturabiliriz.

axios.post('/jsonapi/media/' + mediaType , 
{ 
   "data": { 
      "type": "media--"+mediaType, 
      "attributes": { 
         "name": label, 
         "field_***": fieldInfo, //If there is other fields. 
      }, 
      "relationships": { 
         "bundle": { 
            "data": bundleData 
         }, 
         [mediaField]: { 
            // Field name differs according to media types. Ex: field_media_image for images 
            "data": { 
               "type": res?.data?.data?.type, //File type 
               "id": res?.data?.data?.id, //File id 
            } 
         } 
      } 
   } 
}, 
{ 
   "withCredentials": true, 
   "headers": { 
      'Content-Type': 'application/vnd.api+json', 
      'Accept': 'application/vnd.api+json', 
      'X-CSRF-Token': csrf, 
   } 
}) .then(response => { });