আপলোড করা চিত্রগুলির নামকরণের জন্য সেরা অনুশীলন কোনটি?


15

ধরুন আমার ওয়েব অ্যাপ্লিকেশনটিতে আমার একটি ফর্ম রয়েছে যেখানে ব্যবহারকারীরা একটি প্রোফাইল ছবি আপলোড করতে পারবেন।

ফাইলের আকার, মাত্রা ইত্যাদি সম্পর্কে আমার কয়েকটি প্রয়োজনীয়তা রয়েছে তবে ব্যবহারকারী যখন চিত্রটি আপলোড করেন তখন আমার সিস্টেমে কীভাবে নাম রাখব? আমি মনে করি এটির ধারাবাহিক এবং অনন্য হওয়া দরকার।

একটি জিইউডি হতে পারে?

a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg

একটি টাইমস্ট্যাম্প?

129899740140465735.jpg

একটা হ্যাশ? প্রাক্তন: এমডি 5

b1a9acaf295cf14ffbc5b6538294562c.jpg

এটি করার জন্য কোনও মানক বা প্রস্তাবিত উপায় আছে?


7
যদি আপনার লক্ষ্য প্রতি ব্যবহারকারীর জন্য কেবল একটি প্রোফাইল ছবি সংরক্ষণ করা হয়, তবে কেউ কেউ বলবে যে সুস্পষ্ট পছন্দটি ফাইলটির নাম হবে ব্যবহারকারী আইডির মতো।
অ্যালান নাপিত

টাইমস্ট্যাম্পটি ভাল ধারণা নয়, কারণ ডেটটাইম N এখন কেবল প্রতি 15 মিনিটে সতেজ হয়। সংঘর্ষের উচ্চ সম্ভাবনা রয়েছে, উদাহরণস্বরূপ বাল্কলোড, সারিবদ্ধ অনুরোধ ইত্যাদির সময় ..
jhexp

উত্তর:


27

আপনার দুটি লক্ষ্য পূরণের চেষ্টা করা উচিত: স্বতন্ত্রতা এবং উপযোগিতা।

একটি জিইউডি ব্যবহার করা স্বতন্ত্রতার গ্যারান্টি দেয় তবে একদিন ফাইলগুলি তাদের মূল উত্স থেকে বিচ্ছিন্ন হয়ে যেতে পারে এবং তারপরে আপনি সমস্যায় পড়বেন।

আমার সাধারণ সমাধানটি ফাইলের নাম হিসাবে গুরুত্বপূর্ণ তথ্য যেমন ইউজারআইডি (এটি কোনও ব্যবহারকারীর অন্তর্ভুক্ত) বা আপলোডের তারিখ এবং সময় (যদি তা উল্লেখযোগ্য হয়), অথবা আপলোড করার সময় ব্যবহৃত ফাইলের নাম এম্বেড করা।

ফাইলের নাম এমবেড থাকা তথ্য আপনাকে উদাহরণস্বরূপ কোনও বাগ থেকে পুনরুদ্ধার করতে বা রেকর্ডসটিকে দুর্ঘটনাক্রমে মুছে ফেলার অনুমতি দেয়, এটি একদিন সত্যিই আপনার ত্বককে বাঁচাতে পারে। যদি আপনার সমস্ত কিছু জিআইডি থাকে এবং আপনি ক্যাটালগটি হারাতে পারেন তবে আপনার কাজ পরিষ্কার করার একটি হ্যাক থাকবে।

উদাহরণস্বরূপ, যদি কোনও ফাইল "আমার হলিডে: ফ্লোরিডা 23.jpg" আপলোড করা হয়, ইউজার আইডি 98765 দ্বারা, 2013/04/04 তারিখে 12:51:23 এ এলোমেলো স্ট্রিং যুক্ত করে আমি এরকম কিছু নাম রাখব ad8a7dsf9:

20130404125123-ad8a7dsf9-98765-মাই-ছুটির দিন ফ্লোরিডার-23.jpg

  • স্বতন্ত্রতা তারিখ এবং সময় দ্বারা নিশ্চিত করা হয়, এবং এলোমেলো স্ট্রিং (এটি সঠিকভাবে / dev / urandom বা ক্রিপটজেনর্যান্ডম থেকে এলোমেলোভাবে দেওয়া হয়)।
  • যদি ফাইলটি সর্বদা বিচ্ছিন্ন থাকে তবে আপনি ব্যবহারকারী, তারিখ এবং সময় এবং শিরোনাম সনাক্ত করতে পারেন।
  • সমস্ত কিছু নিম্নতর ক্ষেত্রে ভাঁজ করা থাকে এবং অ-অক্ষরযুক্ত কিছু মুছে ফেলা হয় এবং ড্যাশ দ্বারা প্রতিস্থাপন করা হয়, যা ফাইলের নামটিকে সাধারণ সরঞ্জামগুলি ব্যবহার করে পরিচালনা করতে সহজ করে তোলে (উদাহরণস্বরূপ কোনও স্থান যা খারাপভাবে লিখিত স্ক্রিপ্টগুলিকে বিভ্রান্ত করতে পারে না, কোনও কলোন বা কিছু অক্ষর যা কিছু ফাইল সিস্টেমে নিষিদ্ধ রয়েছে) , এবং তাই)।

7
গৃহকর্মের স্বার্থে আমি প্রতি ব্যবহারকারী আইডিআইডি পৃথক ডিরেক্টরি তৈরি করার পরামর্শ দিচ্ছি যাতে আপনি কোনও ব্যবহারকারীকে মুছে ফেললে আপনাকে তাদের সমস্ত ছবির সন্ধান করতে হবে না। - তাই98765/20130404125123-ad8a7dsf9-my-holiday-florida-23.jpg
শাদুর

1
তাত্ত্বিকভাবে স্বতন্ত্রতা এলোমেলো স্ট্রিং দ্বারা সরবরাহ করা হয় না।
কোলুনিয়া

4
@ কলিউনি, এটি সত্য, এই অর্থে যে গ্যারান্টিযুক্ত স্বতন্ত্রতা এমন কোনও সম্পত্তি নয় যা এমনকি জিইউইডিরা বাস্তব জীবনে রয়েছে, (এমনকি ডাব্লিকেট এমএসি ঠিকানাগুলি দেওয়ার কারণে ভি 1 গাইডগুলিও ফাঁসানো হয়েছে)। আপনি যা কিছু পেতে পারেন তা স্বতন্ত্রতার একটি পরিসংখ্যানগত সম্ভাবনা। তবে ফাইলটি ইতিমধ্যে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে (পরমাণুর সাথে ব্যবহার CreateFileকরে CREATE_NEW), এবং যদি তা হয় তবে বিভিন্ন এলোমেলো ব্যবহার করে আপনি স্বতন্ত্রতা নিশ্চিত করতে পারেন ।
বেন

'সমস্ত কিছু নিম্নতর ক্ষেত্রে ভাঁজ হয়ে যায় এবং অ-বর্ণমালা সংক্রান্ত কিছু মুছে ফেলা হয় এবং ড্যাশ দ্বারা প্রতিস্থাপন করা হয়,' আমি এটিকে মিশ্র করে রাখব, সমস্ত অ্যালফা সংখ্যার সরিয়ে
ফেলব

4

আপনি অ্যাপ্লিকেশনগুলিকে চাপ দিতে চান না (যেমন এক্সপ্লোরার) এবং আপনি ডিরেক্টরিটি খোলার সময় এটিকে ক্রাশ করতে চান না। আপনি প্রকৃত ফাইল সিস্টেমে চাপ দেওয়ার সম্ভাবনা কম, আপনি যদি হাজার হাজার ফাইল স্টোরেজ করতে যাচ্ছেন তবে আপনার এটি বিবেচনায় নেওয়া উচিত।

আপনি যদি হাজার হাজার ফাইল সঞ্চয় করার প্রত্যাশা করেন তবে আমার পরামর্শটি ফোল্ডারে বিভক্ত হওয়া। উদাহরণস্বরূপ upload\silo001,upload\silo002 ইত্যাদি। আপনি হয় আপনার ফাইলগুলিতে ভারসাম্য রাখতে পারেন বা কোনও ফোল্ডার নির্দিষ্ট সংখ্যক ফাইলকে আঘাত না করে অপেক্ষা করতে পারে এবং তারপরে অন্যটি তৈরি করতে পারে।

নামকরণের ক্ষেত্রে, আমি সর্বদা একটি জিইউডি সহ একটি ফাইলের নাম রাখি কারণ এটি বিশ্বব্যাপী অনন্য। আমি আপলোড থেকে এক্সটেনশানটি টানছি এবং ফাইলটির মিলের জন্য এক্সটেনশান সেট করেছি, তবে আসল নামটি একটি নতুন গাইড থেকে সেট করা আছে।

আপনি যদি কোনও আরডিবিএমএসের সাথে একত্রে এটি করছেন এবং বেশ কয়েকটি বিভাগ, যেমন পণ্য, বিভাগ, ইত্যাদি আপনার থাকতে পারে upload\products,upload\categories , ইত্যাদি, এবং আপনি ফাইলের নাম হিসাবে সারি আইডি ব্যবহার করতে পারে।

সেরা অভ্যাসের ক্ষেত্রে, আমিও অতীতে দেখেছি এবং কিছুই পাইনি। আমার কিছু বিকাশকারীদের সাথে আলোচনা করার সময় আমি উপরেরটি নিয়ে এসেছি।


2

কয়েক বছর আগে আমি যে সমাধানগুলিতে কাজ করেছি তার একটিতে আমরা এটি করেছি: ব্যবহারকারী আইডির অংশের জন্য সাব ফোল্ডারগুলি যদি আপনার ব্যবহারকারীর আইডি 232950192 হয়

আমাদের উপ-ফোল্ডারগুলির চিত্র / 23/29/50/192/232950192 থাকবে

চূড়ান্ত ফোল্ডারে অ্যালবুন এবং প্রোফাইল ইমগ ইত্যাদির ফোল্ডার রয়েছে

তবে আমরা ডেটা বেসে সমস্ত কিছু সংরক্ষণ করি এবং দ্রুত ওয়েব সার্ভার অ্যাক্সেসের জন্য ফাইল সিস্টেমে রাখি (এতেও ক্যাশে রয়েছে)

যাইহোক চূড়ান্ত চিত্রটির মূল চিত্রের নাম থাকবে। আমাদের সংস্করণ রাখার দরকার নেই। তবে কিসের জন্য চূড়ান্ত অ্যালবামের নামের অধীনে বা কোনও সংস্করণ আইডির সাথে ডেটা বেসে আরও সাব ফোল্ডার রাখতে পারে। এটি একবার ভাবতে হবে যে এটি একবার উত্পাদনে যায় সময় সাপেক্ষ ব্যতিরেকে পরিবর্তন করা এবং বর্তমান কাঠামোর ত্রুটিযুক্ত প্রবণতা ছাড়া সমস্যা পরিবর্তন করা কঠিন হয়ে পড়ে

জাভাতে একটি সাব ফোল্ডার তৈরি করা এবং এটিতে একটি ফাইল তৈরি করা খুব সহজ:

    File folder = new File(pathwithslashes);// like "images/23/29/50/192/232950192"
    folder.mkdirs();
    File imgFile = new File(folder, name);
    //Now get output stream etc

সাবফোল্ডারগুলিতে তারিখের ডাকটিকিট পেতে: সিম্পলডিটফর্ম্যাট এসডিএফ = নতুন সিম্পলডেটফর্ম্যাট ("/ ইয়াই / এমএম / ডিডি /"); pathwithslashes = pathwithslashes + sdf.format (now); // now is a util.Date ফাইল ফোল্ডার = নতুন ফাইল (pathwithslashes);

ডট নেট /programming/5482230/c-sharp-equivalent-of-javas-mkdirs


নেস্টেড ডিরেক্টরিগুলির পরামর্শ দেওয়ার জন্য +1। আমি মনে করি এটা বিভিন্ন ফাইল সিস্টেম হিসেবে বিবেচনা করতে কর্মক্ষমতা সমস্যার সম্মুখিন যখন ফোল্ডার "অনেকগুলি" ফাইল ধারণ করতে পারে গুরুত্বপূর্ণ: stackoverflow.com/questions/197162/... , support.microsoft.com/kb/130694/en-us , ইত্যাদি
deizel

1
হ্যাঁ অন্য একটি সিস্টেমে ওয়েব সার্ভারের একটি হ্যাং ছিল যখন আমরা ৪০০,০০০ এরও বেশি ফাইল রয়েছে এমন আ dir তে rmdir করার চেষ্টা করেছি। আমাদের এর মতো আরও ফোল্ডার ছিল। সুতরাং একবারে মুছে ফেলার জন্য কয়েকটি ফাইল পেতে ডায়ার / পি নামে একটি কাস্টম প্রোগ্রাম ব্যবহার করা হয়েছে। কয়েক ঘন্টা সময় নিল তবে কোনও সময় নেই :)
tgkprog

1

আমি কেবল এমডি 5 বা ধারণামূলক সমতুল্য কিছু ব্যবহার করার পরামর্শ দেব। ফাইলগুলির নামগুলি ডাইজেস্ট করে নাম পরিবর্তন করে আপনি কেবল স্বতন্ত্রতা দিচ্ছেন না (যথাসম্ভব চিত্রের জন্য সর্বদা চিত্রগুলি ক্যাশে করুন, এবং বিষয়বস্তু ভিত্তিক নামকরণের সাথে, যথাযথ চিত্র সহ, আপনি চিত্রগুলি ব্যবহারিকভাবে চিরকালের জন্য ক্যাশে রাখতে পারেন)।

এছাড়াও, কোনও বড় বিষয় নয়, তবে বিভিন্ন ব্যবহারকারী যখন একই চিত্র আপলোড করেন তখন এটি খাঁটি অনুমানের ঘটনা নয়। বাক্সের বাইরে আপনার কাছে একটি ছোট ডাটা স্টোরেজ অপ্টিমাইজেশন থাকবে।

অন্য যে কোনও প্রস্তাবিত হিসাবে: আমার হিসাবে, আমি কোনও ফাইলের নামে কোনও ধরণের সহায়ক তথ্য রাখার প্রবল প্রতিপক্ষ । যখন আমি অনেক ছোট ছিলাম (এবং কিছুটা স্লিমার :), তখন আমি পার্ল বিকাশকারী হয়েছি এবং সাধারণ জ্ঞানের কারণে ফাইলের নামে যথাযথ সহায়তার তথ্য সংরক্ষণ করার সন্দেহজনক অভ্যাস ছিল, যেহেতু পার্ল স্ট্রিং প্যাটার্ন বৈশিষ্ট্যগুলি দুর্দান্ত। এবং আমি এই সিদ্ধান্তে পৌঁছেছি যে, ওয়েব বিকাশের কথা বলা, এটি সর্বদা ফাইলের নাম থেকে আলাদাভাবে ফাইল সাথে সম্পর্কিত সকল ডেটা রাখা ভাল পছন্দ।

মনে রাখবেন যে আজকাল, যখন মোবাইল ইন্টারফেসগুলি প্রাধান্য পাচ্ছে, প্রকৃত ফাইলের নাম এটি কম গুরুত্বপূর্ণ যেটি এটি 5, 10 বছর আগে ছিল। তবে এটি যদি আপনার আবেদনের প্রেক্ষাপটে গুরুত্বপূর্ণ হয় তবে আপনি সর্বদা কিছু পুরানো স্কুল জাদুতে Content-Disposition: attachment; filename="pretty_file_name.jpg"এইচটিটিপি শিরোনামকে জড়িত করে নিজের ইচ্ছামত কোনও ফাইলের নাম তৈরির সাথে জড়িত থাকতে পারেন। এছাড়াও, আধুনিক ব্রাউজারগুলি নতুন এইচটিএমএল 5 অ্যাট্রিবিউট, ডাউনলোডের পথ প্রস্তুত করছে । আমি বিশ্বাস করি না যে আসলে "মানব পাঠযোগ্য" চিত্রের নাম দেখা এমন একটি জিনিস যা আপনার বেশিরভাগ ক্ষেত্রেই ভাবা উচিত।

ইউপিডি: একটি ডিরেক্টরিতে খুব বেশি ফাইল না থাকার জন্য একটি পরিবর্তন করা যেতে পারে - কেবল প্রথম 3 টি অক্ষর নিন এবং dir তৈরি করুন।


1
এমডি 5 যদিও আসলেই অনন্য?
আই.দেব্রিজ 19

@ আই.ড্যাব্রিজ, আমি বিশেষজ্ঞ নই, তবে যতদূর আমি জানি, এই উদ্দেশ্যে এটি যথেষ্ট ভাল। আপনি অতিরিক্ত ফাইলের আকারের চেক করব বিশেষ করে যদি, যেহেতু ভাল হ্যাশ অ্যালগরিদম আসলে যে একই আকারের সত্ত্বা দান কম সম্ভবত একটি সংঘর্ষের থাকবে - stackoverflow.com/questions/2442632/...
shabunc

-1

Sha4 এর মতো কোনও কিছুর সাথে সংঘর্ষের সম্ভাবনা অসীম। যদি আপনি হ্যাশটিকে ইউজারিড বা এমনকি একটি সাধারণ তারিখের সাথে একত্রিত করেন তবে এর চেয়েও কম।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.