Misalkan saya memiliki formulir di aplikasi web saya di mana pengguna dapat mengunggah gambar profil.
Saya punya beberapa persyaratan tentang ukuran file, dimensi dll, tetapi ketika pengguna mengunggah gambar, bagaimana saya harus memberi nama pada sistem saya? Saya kira itu harus konsisten dan juga unik.
Mungkin GUID?
a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg
Stempel waktu?
129899740140465735.jpg
Hash? Mis: md5
b1a9acaf295cf14ffbc5b6538294562c.jpg
Apakah ada cara standar atau yang disarankan untuk melakukan ini?
asp.net-mvc
file-handling
naming-standards
Rowan Freeman
sumber
sumber
Jawaban:
Anda harus mencoba memenuhi dua tujuan: Keunikan, dan kegunaan.
Menggunakan GUID menjamin keunikan, tetapi suatu hari file mungkin terlepas dari sumber aslinya, dan kemudian Anda akan berada dalam masalah.
Solusi khas saya adalah menanamkan informasi penting ke dalam nama file, seperti userID (jika milik pengguna) atau tanggal dan waktu yang diunggah (jika ini penting), atau nama file yang digunakan saat mengunggahnya.
Ini mungkin benar-benar menyelamatkan kulit Anda suatu hari, ketika informasi yang disematkan dalam nama file memungkinkan Anda, misalnya, pulih dari bug, atau penghapusan catatan secara tidak sengaja. Jika yang Anda miliki hanyalah GUID, dan Anda kehilangan katalognya, Anda akan memiliki pekerjaan yang membersihkannya.
Misalnya, jika file "My Holiday: Florida 23.jpg" diunggah, oleh userID 98765, pada 2013/04/04 pada 12:51:23 Saya akan menamainya seperti ini, menambahkan string acak
ad8a7dsf9
:20130404125123-ad8a7dsf9-98765-my-holiday-florida-23.jpg
sumber
98765/20130404125123-ad8a7dsf9-my-holiday-florida-23.jpg
CreateFile
dengan atomCREATE_NEW
), dan menggunakan keacakan berbeda jika itu.Anda tidak ingin menekankan aplikasi (seperti Explorer) dan membuatnya macet ketika Anda membuka direktori. Meskipun tidak mungkin Anda akan menekankan sistem file yang sebenarnya, Anda perlu mempertimbangkan ini jika Anda akan menyimpan ribuan file.
Jika Anda berharap untuk menyimpan ribuan file saran saya adalah mempartisi ke dalam folder. Misalnya
upload\silo001
,upload\silo002
dll. Anda dapat menyeimbangkan file atau menunggu hingga folder menyentuh sejumlah file lalu membuat yang lain.Sehubungan dengan penamaan, saya selalu memberi nama file dengan GUID karena itu unik secara global. Saya menarik ekstensi dari unggahan dan mengatur ekstensi file agar cocok, tetapi nama sebenarnya ditetapkan dari Panduan baru.
Jika Anda melakukan ini dalam hubungannya dengan RDBMS dan memiliki beberapa kategori, yaitu produk, kategori, dll Anda bisa memiliki
upload\products
,upload\categories
, dan sebagainya, dan Anda bisa menggunakan ID baris sebagai nama file.Dalam hal praktik terbaik, saya juga telah melihat di masa lalu dan tidak menemukan apa pun. Saya datang dengan hal di atas saat berdiskusi dengan beberapa pengembang saya.
sumber
Dalam salah satu solusi yang saya kerjakan tahun lalu kami melakukan ini: sub folder untuk sebagian id pengguna jadi jika id pengguna Anda adalah 232950192
kita akan memiliki gambar sub folder / 23/29/50/192/232950192
di folder terakhir ada folder untuk albuns dan profil profil dll
Tapi kami juga menyimpan semuanya dalam basis data dan menyimpannya dalam sistem file untuk akses server web cepat (yang juga memiliki caching)
Pokoknya gambar final akan memiliki nama gambar asli. Kami tidak perlu menyimpan versi. Tetapi untuk apa yang dapat menyimpan lebih banyak sub folder di bawah nama album akhir atau dalam basis data dengan id versi. perlu berpikir melalui setelah produksi akan sulit untuk mengubah hal-hal tanpa memakan waktu dan koreksi rawan kesalahan dalam struktur saat ini
Sangat mudah untuk membuat sub folder di java dan membuat file di dalamnya:
Untuk mendapatkan cap tanggal dalam subfolder: SimpleDateFormat sdf = SimpleDateFormat baru ("/ yyyy / MM / dd /"); pathwithslashes = pathwithslashes + sdf.format (sekarang); // sekarang adalah util.Date File folder = File baru (pathwithslashes);
Dot net /programming/5482230/c-sharp-equivalent-of-javas-mkdirs
sumber
Saya akan merekomendasikan untuk menggunakan hanya md5 atau apa pun yang secara konsep setara. Dengan mengganti nama file dengan mencerna isinya, Anda tidak hanya memberikan keunikan (selalu cache gambar selama mungkin, dan dengan penggantian nama berbasis konten, baik, dengan yang benar, Anda dapat menyimpan gambar secara praktis selamanya).
Juga, bukan masalah besar, tetapi bagaimanapun itu bukan kasus hipotetis murni ketika pengguna yang berbeda mengunggah gambar yang persis sama. Hanya di luar kotak Anda akan memiliki optimasi penyimpanan data kecil.
Adapun hal lain yang diusulkan: seperti untuk saya, saya adalah lawan yang kuat untuk menjaga segala jenis informasi tambahan dalam nama file. Ketika saya masih jauh lebih muda (dan sedikit lebih ramping :), saya telah menjadi seorang pengembang Perl dan memiliki kebiasaan yang meragukan untuk menyimpan sebanyak mungkin informasi tambahan dalam nama file sebagaimana akal sehat memungkinkan saya, karena fitur-fitur pola string Perl sangat mengagumkan. Dan saya sampai pada kesimpulan bahwa, berbicara tentang pengembangan web, selalu merupakan pilihan yang lebih baik untuk menyimpan data yang terkait dengan file secara terpisah dari nama file.
Perlu diingat bahwa saat ini, ketika antarmuka seluler mendominasi, nama file sebenarnya adalah hal yang kurang penting yaitu 5, 10 tahun yang lalu. Tetapi bahkan jika ini akan sangat penting dalam konteks aplikasi Anda, Anda selalu dapat melibatkan beberapa sihir sekolah lama dengan melibatkan
Content-Disposition: attachment; filename="pretty_file_name.jpg"
header HTTP, membuat nama file yang relevan yang Anda inginkan. Juga, browser modern membuka jalan untuk atribut HTML5 baru, unduh . Saya tidak percaya bahwa benar-benar melihat nama gambar "dapat dibaca manusia" adalah hal yang harus Anda pikirkan dalam sebagian besar kasus.UPD: Sebuah modifikasi dapat dilakukan agar tidak memiliki terlalu banyak file dalam satu direktori - cukup ambil 3 huruf pertama dan buat dir.
sumber
Peluang tabrakan dengan sesuatu seperti sha4 sangat kecil. Jika Anda menggabungkan hash dengan userid atau bahkan tanggal sederhana, apalagi itu.
sumber