File yang dilampirkan ke node tidak pernah dihapus dari server bahkan setelah mereka dihapus dari node (dan edit itu disimpan), Drupal 7


10

Saya telah melihat sesuatu yang aneh di situs saya: setelah melampirkan file ke sebuah node (melalui bidang file biasa), file itu tidak pernah dihapus dari server . Saya menghapusnya dari node, simpan perubahan itu, tetapi saya bisa melihat file masih di server.

Hal ini membuat penggantian file menjadi sangat sulit, karena ketika pengguna mencoba melampirkan pengganti, nama file memiliki sufiks "_0" atau "_1" (karena file asli masih ada di server dan itu membuat nama itu duplikat) . Itu berarti bahwa kita perlu menemukan semua tautan ke file dan mengedit masing-masing agar sesuai dengan nama file / url baru. Ini berantakan total.

Saya sedang mencari online dan sepertinya tidak ada orang yang memiliki masalah ini - file-file tersebut harus dihapus dari server begitu mereka dihapus dari node.

Adakah ide mengapa ini bisa terjadi dalam kasus saya? Saya tidak yakin harus mulai mencari ke mana. Tentu saja halaman konfigurasi 'Sistem file' tidak memiliki sifat seperti itu sebagai opsi yang mungkin telah diperiksa. Dan opsi-opsi lapangan itu sendiri tampaknya tidak memiliki sifat seperti itu yang mungkin saya setel secara tidak sengaja. Ada ide lain?


Jika saya mengerti benar itu tidak segera dihapus tetapi itu ditandai untuk dihapus. Setelah ditandai itu dibersihkan pada cron run. Sama halnya dengan pembersihan tabel.
junedkazi

Pemikiran yang bagus. Saya memang mengujinya, dan file tidak pernah dihapus, bahkan setelah beberapa cron berjalan.
Boriana Ditcheva

Jawaban:


17

Saya mendapatkannya! Itu adalah revisi. Saya kira itu masuk akal. Jika Anda mengaktifkan revisi untuk tipe konten itu, ia menyimpan semua file lama Anda di server (terkait dengan revisi lama), jadi mengganti file pasti lebih sulit. Jika Anda mencoba untuk menghapusnya dan menambahkannya lagi ke node, nama / tautannya diperbarui, seperti yang saya sebutkan dalam pertanyaan saya. Karena file dengan nama itu disimpan di server dan ada duplikasi nama, itu menambahkan sufiks "_0", "_1" dll untuk versi yang diunggah di masa depan dari nama file itu.

Saya mengerti mengapa ini terjadi, karena seluruh titik revisi adalah dapat kembali ke versi halaman sebelumnya.

Cara mengatasinya adalah Anda benar-benar dapat menghapus revisi lama dari tab 'Revisi' atau 'Sedang' (jika menggunakan Workbench Moderation) yang berisi file yang Anda coba ganti. Kemudian unggah lagi, dan namanya akan cocok tanpa Anda harus kembali dan mengedit tautan yang menunjuk ke file itu.

Harapan itu masuk akal dan membantu orang lain juga!


4

Saya memiliki kasus penggunaan yang sama (ingin mengganti file sambil mempertahankan nama file), dan kode berikut dalam modul khusus memenuhi tujuan ini. Kode ini bergantung pada modul Entity API sehingga harus ditambahkan sebagai ketergantungan pada file .info modul Anda. Umpan balik.

Ini memungkinkan untuk segera menghapus file setelah mengklik 'Hapus' kemudian menyimpan node. Peringatan: ini juga berarti bahwa ketika Anda menghapus file dan menyimpan node, Anda tidak bisa mendapatkan file itu kembali dengan memutar kembali ke revisi sebelumnya.

/**
 * Implements hook_node_update().
 *
 * Delete files from old node revisions.
 */
function MYMODULE_node_update($node) {
  // Array of content types to act on.
  if (in_array($node->type, array('page', 'article'))) {
    $wrapper = entity_metadata_wrapper('node', $node);
    $original_wrapper = entity_metadata_wrapper('node', $node->original);

    // Array of file fields to act on.
    foreach (array('field_public_files', 'field_private_files') as $field) {
      if (!isset($original_wrapper->{$field})) {
        continue;
      }
      $current_files = array();
      $original_files = array();
      // Get files that were attached to the original node (before update).
      foreach ($original_wrapper->{$field}->value() as $file) {
        $original_files[] = $file['fid'];
      }
      // Stop if there were no files previously attached.
      if (empty($original_files)) {
        continue;
      }
      // Get files currently attached to the node (after update).
      foreach ($wrapper->{$field}->value() as $file) {
        $current_files[] = $file['fid'];
      }
      // Delete files that were in the original node but were removed during
      // this update.
      $deleted_files = array_diff($original_files, $current_files);
      foreach ($deleted_files as $fid) {
        if ($file = file_load($fid)) {
          // Delete all usages of the file. Each node revision adds to the usage
          // count.
          file_usage_delete($file, 'file', 'node', $node->nid, 0);
          file_delete($file);
        }
      }
    }
  }
}

di mana kita harus meletakkan kodenya.
BandOfBrothers

Bukan jawaban permintaan asli yang dicari, tetapi saya menemukan itu tepat sasaran. Terima kasih sudah berbagi di sini!
texas-bronius


0

Ini mungkin masalah izin di server. Coba hal yang sama pada instalasi bersih - jika Anda mengalami masalah yang sama, maka terserah server dan bukan Drupal.

Apakah ada sesuatu di log?


Saya baru saja mengujinya untuk masalah izin. Saya memiliki salinan lokal situs di mesin pribadi saya, dan masalahnya ada di sana juga. Namun, pada instalasi yang bersih, file memang dihapus. Di situs saya yang bermasalah, file tidak terhapus bahkan setelah saya menghapus seluruh simpul yang dilampirkan. Ada ide lain apa yang menyebabkan ini di pengaturan Drupal saya. Saya berasumsi itu pasti modul ...
Boriana Ditcheva

Setidaknya Anda mempersempitnya ke instalasi. Modul apa yang Anda gunakan? Adakah modul custom / fork / dev?
Aram Boyajyan

0

Saya tidak beruntung menghapus revisi lama atau menyimpan node tanpa file terlampir dan kembali. Ini adalah satu-satunya hal yang selalu berhasil:

  1. Menghapus simpul
  2. Menghapus file melalui pengeditan node dan secara manual menghapus file dari server.

Saya benar-benar benci pilihan kedua itulah sebabnya saya di sini mencari solusi lain.

(Saya bisa keluar dari batasan, juga karena saya memiliki banyak klien yang menjalankan D6.)


Saya memulai tiket tentang ini sejak lama: drupal.org/node/1816584 . Berpadu jika Anda mau, dan mungkin bisa ada diskusi yang lebih serius tentang ini jika ada suara tambahan.
Boriana Ditcheva

0

Saya mengalami masalah ini juga dengan moderasi workbench, dan memasukkan bidang file benar-benar menunjukkan versi lama dari file yang diunggah ketika file dengan nama yang sama diunggah kembali dalam revisi dokumen yang berbeda.

Agar semuanya berjalan dengan lancar, tambahkan vid node sebagai folder ke jalur unggah file. Biasanya saya melakukan sesuatu seperti.

Jalur folder = aset / [simpul: nid] - [simpul: judul] / [simpul: vid]

Ya mereka adalah folder panjang yang jelek dengan kegilaan sub folder, tetapi Anda dapat menemukan file dengan sangat mudah melalui ID node atau judul, dan kemudian sub-folder tersebut mencegah tabrakan nama sehingga Anda dapat menyimpan banyak versi file yang sama dengan nama yang sama. Kemudian, Anda dapat menghapus revisi lama jika Anda ingin membersihkan ruang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.