


Tutorial mengenai Penyalinan Kandungan Folder Penyimpanan Awan: Berdasarkan senarai fail dan operasi berulang
Memahami konsep "folder" dalam penyimpanan awan
Dalam banyak perkhidmatan penyimpanan awan, seperti Google Cloud Storage (penyimpanan Firebase yang mendasari menggunakan GCS), "folder" bukan entiti bebas. Mereka hanya awalan laluan yang terkandung dalam nama fail (objek). Sebagai contoh, fail bernama dokumen/docid/file.Name mempunyai dokumen/docid/sebahagian daripada nama objek sahaja dan tidak mewakili objek folder sebenar. Ini bermakna anda tidak boleh menyalin secara langsung "folder" seperti yang anda lakukan dalam sistem fail tempatan anda.
Untuk mencapai salinan kumpulan "Folder", kita perlu mengamalkan penyelesaian:
- Senarai Fail: Mendapatkan semua objek fail di bawah awalan Path "Folder" sumber.
- Salin satu demi satu: Jalankan melalui fail -fail ini dan salin setiap fail dari laluan asalnya ke laluan sasaran baru.
Langkah Pelaksanaan Operasi Salinan Batch
Kami akan menunjukkan proses ini menggunakan Node.js dan Firebase Admin SDK (untuk storan Google Cloud).
Langkah 1: Senaraikan semua fail di bawah awalan yang ditentukan
Untuk mendapatkan semua fail di bawah "folder", anda boleh menggunakan kaedah baldi.getFiles () dan lulus parameter awalan untuk menentukan awalan laluan.
const admin = memerlukan ('firebase-admin'); // pastikan sdk admin firebase diasaskan // admin.initializeapp ({ // kelayakan: admin.credential.applicationDefault (), // StorageBucket: 'your-project-id.appspot.com' // Gantikan dengan nama baldi anda //}); /** * Menyenaraikan semua fail di bawah awalan yang ditentukan. * @param {String} Awalan awalan fail untuk disenaraikan (iaitu "Folder" Path). * @returns {Promise <array>>} array yang mengandungi objek fail. */ fungsi async ListFileSInPrefix (awalan) { const bucket = admin.Storage (). Bucket (); biarkan fail = []; Cuba { // Kaedah getFiles mengembalikan array, elemen pertama adalah pelbagai objek fail, dan yang kedua adalah token pertanyaan seterusnya (untuk paging) [Files] = menunggu Bucket.GetFiles ({awalan: awalan}); console.log (`cari $ {files.length} fail di bawah '$ {prefix}'.`); mengembalikan fail; } menangkap (ralat) { Console.error (`gagal menyenaraikan fail, awalan: $ {awalan}, ralat:`, ralat); membuang ralat; } } // Contoh Penggunaan // ListFileSInPrefix ('Dokumen/1/') // .then (files => { // files.foreach (file => console.log (file.name)); //}) // .catch (err => console.error ('gagal mendapatkan senarai fail:', err));</array>
Langkah 2: Salin fail satu demi satu ke lokasi baru
Selepas mendapat senarai fail, kami perlu meleleh melalui setiap fail dan menyalinnya ke laluan sasaran baru menggunakan kaedah File.Copy (). Apabila membina laluan sasaran, anda perlu menggantikan bahagian laluan fail asal yang dimiliki oleh awalan "folder" dengan folder sasaran baru "Folder".
/** * Kandungan "Folder" Salinan Awan Penyimpanan Awan ke lokasi baru. * Oleh kerana penyimpanan awan tidak mempunyai folder dalam pengertian tradisional, operasi ini dicapai dengan menyenaraikan fail yang sepadan dengan awalan dan menyalinnya satu demi satu. * @param {string} sumber prefix SourcePrefix Source 'Folder', seperti 'Documents/Docid/' atau 'Documents/Docid' * @param {string} destinasi prefix Path DestinationPrefix Sasaran ', seperti' Pengguna/UserId/Documents/Docid/'atau' Pengguna/UserID/Documents/Docid ' * @returns {Promise <boid>} */ Fungsi Async CopyFolderContents (SourcePrefix, DestinationPrefix) { const bucket = admin.Storage (). Bucket (); // pastikan awalan berakhir dengan slash supaya pemprosesan laluan seterusnya adalah konsisten constiversiveSourcePrefix = sourcePrefix.endSwith ('/')? SourcePrefix: SourcePrefix '/'; const EffectiveDestinationPrefix = destinasiPrefix.endSwith ('/')? DestinationPrefix: DestinationPrefix '/'; Biarkan filestocopy; Cuba { // 1. Senaraikan semua fail di bawah awalan sumber [filestocopy] = menunggu baldi.getfiles ({prefix: effectiveSourcePrefix}); jika (fileStocopy.length === 0) { console.log (tiada fail yang terdapat di bawah `sumber sumber '$ {effectiveSourcePrefix}'.`); kembali; } console.log (`cari $ {filestocopy.length} fail dan mula menyalin ...`); // 2. Buat operasi salinan untuk setiap fail const copyPromises = fileStocopy.map (async (file) => { // Ekstrak nama fail relatif dari jalur fail asal const relativeFileName = file.name.substring (effectiveSourcePrefix.length); // Membina jalur fail sasaran baru const destinationPath = effectiveDestinationPrefix relatifFileName; Cuba { menunggu file.copy (bucket.file (destinasiPath)); console.log (`berjaya disalin: $ {file.name} -> $ {destinationpath}`); kembali {status: 'dipenuhi', nilai: {source: file.name, destinasi: destinasipath}}; } menangkap (ralat) { console.error (`Copy gagal: $ {file.name} -> $ {destinationpath}, error:`, error); kembali {status: 'ditolak', alasan: ralat baru (`copy file $ {file.name} gagal: $ {error.message}}}}; } }); // 3. Gunakan Janji.AllSettled untuk menunggu semua Operasi Salin untuk melengkapkan // Promise.allSettled akan menunggu semua Janji untuk diselesaikan, tanpa mengira kejayaan atau kegagalan Const Results = menunggu janji.allsettled (CopyPromises); kegagalan const = results.filter (result => result.status === 'ditolak'); jika (kegagalan.length> 0) { Console.warn (`Operasi salinan batch selesai, tetapi salinan $ {files.length} fail gagal.`); kegagalan.foreach (gagal => console.error ('Butiran gagal:', fail.Reason)); membuang ralat baru (`Operasi salinan batch gagal sepenuhnya berjaya, dan terdapat $ {Failures.Length} fail yang gagal disalin.`); } else { Console.log (`semua $ {filestocopy.length} fail telah disalin dengan jayanya.`); } } menangkap (err) { Console.error (`ralat berlaku semasa melakukan replikasi batch:`, err); membuang kesalahan; // rethrow untuk pemanggil untuk mengendalikan} } // Contoh penggunaan // Katakan anda ingin menyalin segala -galanya di bawah 'dokumen/1/' kepada 'pengguna/testid/dokumen/1/' // CopyFolderContents ('Dokumen/1/', 'Pengguna/TestId/Dokumen/1/') // .then (() => console.log ('Operasi salinan batch selesai.')) // .catch (err => console.error ('Operasi salinan batch gagal:', err));</boid>
Nota dan amalan terbaik
-
Prestasi dan kos operasi berskala besar:
- Pagination: Untuk "folder" yang mengandungi sejumlah besar fail (seperti puluhan ribu atau beratus -ratus ribu fail), Bucket.GetFiles () boleh mengembalikan hasil separa. Anda perlu mengendalikan penomboran, iaitu menggunakan autopaginate: pilihan palsu dan semak NextQuery atau NextPageToken dalam hasil pulangan untuk mendapatkan semua fail.
- Salinan selari: Janji.AllSettled boleh melakukan pelbagai operasi replikasi selari, yang dapat meningkatkan kecekapan dengan ketara. Tetapi sedar sekatan konkurensi dan kuota API.
- Kos: Operasi replikasi menanggung kos operasi dan potensi penghantaran data (trafik keluar) kos. Untuk replikasi silang rantau, kos mungkin lebih tinggi. Sila periksa butiran harga pembekal perkhidmatan awan anda.
-
Pengendalian ralat dan idempotence:
- Kod di atas menggunakan janji.allsettled untuk memastikan bahawa keseluruhan operasi berterusan dan melaporkan semua keputusan walaupun sesetengah fail disalin gagal.
- Kaedah ini bukan operasi atom. Jika kesilapan atau gangguan berlaku semasa proses penyalinan, beberapa fail mungkin telah disalin, sementara yang lain tidak. Sekiranya anda perlu memastikan atomik operasi (sama ada semua berjaya atau semua gagal), anda mungkin memerlukan pengurusan transaksi yang lebih kompleks atau mekanisme rollback.
- Pertimbangkan untuk melaksanakan logik semula, terutamanya untuk kesilapan sementara rangkaian.
-
Penghapusan fail sumber (operasi bergerak):
- Jika tujuan anda adalah untuk "memindahkan" kandungan folder daripada hanya menyalin, anda perlu memadam fail sumber satu demi satu selepas semua fail berjaya disalin ke lokasi baru. Pastikan untuk melakukan penghapusan selepas mengesahkan bahawa semua operasi replikasi telah selesai berjaya untuk mengelakkan kehilangan data.
-
Pemprosesan Laluan:
- Pastikan SourcePrefix dan DestinationPrefix diformat dengan betul. Dalam kod contoh, kami memastikan konsistensi awalan dengan menambah slashes, yang membantu untuk mengekstrak nama fail dengan betul dan membina laluan sasaran.
Meringkaskan
Walaupun perkhidmatan penyimpanan awan tidak menyediakan API replikasi "folder" langsung, dengan menggabungkan senarai fail dan strategi salinan satu demi satu, kami dapat melaksanakan penghijrahan kandungan folder secara berkesan. Memahami mekanisme asas penyimpanan awan dan mengendalikan prestasi, kos, dan kesilapan operasi berskala besar adalah kunci untuk berjaya melaksanakan tugas-tugas tersebut. Berikutan langkah -langkah dan langkah berjaga -jaga yang disediakan dalam artikel ini akan membantu anda menguruskan data fail dalam penyimpanan awan dengan selamat dan cekap.
Atas ialah kandungan terperinci Tutorial mengenai Penyalinan Kandungan Folder Penyimpanan Awan: Berdasarkan senarai fail dan operasi berulang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Artikel ini akan memperkenalkan cara menggunakan JavaScript untuk mencapai kesan mengklik pada imej. Idea teras adalah menggunakan atribut data HTML5 untuk menyimpan laluan imej alternatif, dan mendengar klik acara melalui JavaScript, secara dinamik menukar atribut SRC, dengan itu menyedari penukaran imej. Artikel ini akan memberikan contoh dan penjelasan kod terperinci untuk membantu anda memahami dan menguasai kesan interaktif yang biasa digunakan ini.

Pertama, periksa sama ada penyemak imbas menyokong GeolocationAPI. Jika disokong, hubungi getCurrentPosition () untuk mendapatkan koordinat lokasi semasa pengguna, dan dapatkan nilai latitud dan longitud melalui panggilan balik yang berjaya. Pada masa yang sama, berikan pengecualian pengendalian panggilan balik ralat seperti kebenaran penafian, ketiadaan lokasi atau tamat masa. Anda juga boleh lulus dalam pilihan konfigurasi untuk membolehkan ketepatan yang tinggi, menetapkan tempoh masa dan tempoh kesahihan cache. Seluruh proses memerlukan kebenaran pengguna dan pengendalian ralat yang sepadan.

Artikel ini bertujuan untuk menyelesaikan masalah kembali null apabila mendapatkan unsur -unsur DOM melalui document.getElementById () dalam JavaScript. Inti adalah untuk memahami masa pelaksanaan skrip dan status parsing DOM. Dengan betul meletakkan tag atau menggunakan acara domcontentloaded, anda dapat memastikan bahawa elemen itu dicuba lagi apabila ia tersedia, dengan berkesan mengelakkan kesilapan tersebut.

TheBestatorreateamulti-LinestringinjavascriptsisingSisisingTemplatalAlalSwithBackTticks, yangPreserveticks, whoPreserverekeandeexactlyaswritten.

Penggunaan teras API komposisi NUXT3 termasuk: 1. DefinePagemeta digunakan untuk menentukan maklumat meta halaman, seperti tajuk, susun atur dan middleware, yang perlu dipanggil terus di dalamnya dan tidak boleh diletakkan dalam pernyataan bersyarat; 2. Usehead digunakan untuk menguruskan tag header halaman, menyokong kemas kini statik dan responsif, dan perlu bekerjasama dengan DefinePagemeta untuk mencapai pengoptimuman SEO; 3. UseasyncData digunakan untuk mendapatkan data asynchronous secara selamat, secara automatik mengendalikan status pemuatan dan ralat, dan menyokong kawalan pemerolehan data pelayan dan klien; 4. UseFetch adalah enkapsulasi useasyncdata dan $ ambil, yang secara automatik memasuki kunci permintaan untuk mengelakkan permintaan pendua

Untuk membuat selang pengulangan dalam JavaScript, anda perlu menggunakan fungsi setInterval (), yang akan berulang kali melaksanakan fungsi atau blok kod pada selang milisaat tertentu. Sebagai contoh, setInterval (() => {console.log ("melaksanakan setiap 2 saat");}, 2000) akan mengeluarkan mesej setiap 2 saat sehingga dibersihkan oleh ClearInterval (intervalid). Ia boleh digunakan dalam aplikasi sebenar untuk mengemas kini jam, pelayan pengundian, dan lain -lain, tetapi memberi perhatian kepada had kelewatan minimum dan kesan masa pelaksanaan fungsi, dan membersihkan selang waktu ketika tidak lagi diperlukan untuk mengelakkan kebocoran ingatan. Terutama sebelum pemotongan komponen atau penutupan halaman, pastikan bahawa

Tutorial ini menerangkan secara terperinci bagaimana untuk memformat nombor ke dalam rentetan dengan dua perpuluhan tetap dalam JavaScript, walaupun bilangan bulat boleh dipaparkan dalam bentuk "#.00". Kami akan memberi tumpuan kepada penggunaan number.Prototype.TOfixed (), termasuk sintaksnya, fungsi, kod sampel, dan mata utama yang perlu diperhatikan, seperti jenis pulangannya sentiasa menjadi rentetan.

Gunakan kaedah WriteText Clipboardapi untuk menyalin teks ke papan klip, ia perlu dipanggil dalam konteks keselamatan dan interaksi pengguna, menyokong penyemak imbas moden, dan versi lama boleh diturunkan dengan execcommand.
