2010-02-18 18 views
14

मेरे पास माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 के साथ एंटिटी फ्रेमवर्क पर बनाया गया एएसपी.नेट एमवीसी समाधान है। मुझे एक ऐसा फ़ंक्शन बनाना होगा जो मेरे उपयोगकर्ताओं को फ़ाइलों को अपलोड करने दे।इकाई ढांचे के साथ डेटाबेस में फ़ाइलों को सहेजें

क्या मैं चाहते हैं:

  • एक समाधान
  • एक समाधान है कि पता लगाता है और हैश के कुछ प्रकार के माध्यम से दो बार एक ही फाइल को अपलोड करने से रोकता है डाटाबेस में फ़ाइलों को स्टोर करने इकाई की रूपरेखा का उपयोग करता है/चेकसम
  • डेटाबेस/तालिका डिजाइन

उत्तर

10

पर युक्तियाँ "सही" जिस तरह से एक एसक्यूएल सर्वर 2008 डेटाबेस use the FILESTREAM data type है में एक फ़ाइल को संग्रहीत करने के। मुझे पता नहीं है कि इकाई फ्रेमवर्क उस का समर्थन करता है, लेकिन आप निश्चित रूप से कोशिश कर सकते हैं और देख सकते हैं कि क्या होता है।

उसने कहा, ज्यादातर समय जब लोग ऐसा करते हैं, तो वे फ़ाइल को डेटाबेस में संग्रहीत नहीं करते हैं। ऐसा करने का मतलब है कि आपको केवल एक फ़ाइल की सेवा करने के लिए ASP.NET और डेटाबेस सर्वर से गुज़रना होगा, जिसे आप सीधे वेब सर्वर से सेवा दे सकते हैं। यह आपके डेटाबेस और साइट के लिए बैकअप चित्र को कुछ हद तक जटिल कर सकता है। इसलिए जब हम अपने एमवीसी/एंटिटी फ्रेमवर्क में फाइलें अपलोड करते हैं, तो हम डेटाबेस में फ़ाइल स्थान के लिए केवल एक संदर्भ संग्रहीत करते हैं, और फाइल को कहीं और स्टोर करते हैं।

जाहिर है, आपके लिए कौन सी रणनीति सही है, आपके आवेदन के विवरणों पर बहुत निर्भर करती है।

40

अपने इकाई मॉडल में, एक byte[] संपत्ति के लिए ब्लॉब डेटाबेस स्तंभ मैप करें। अपलोड की गई फ़ाइल की सामग्री को इकाई ऑब्जेक्ट की उस संपत्ति पर असाइन करें, और ObjectContext में परिवर्तनों को सहेजें।

एक हैश की गणना के लिए, आपको MD5CryptoServiceProvider वर्ग

+12

उस उत्तर के साथ क्या गलत है? क्या आप कम से कम डाउनवोट का कारण दे सकते हैं? यही वह चीज है जो मैं वास्तव में एसओ पर नफरत करता हूं: जो लोग स्पष्टीकरण के बिना डाउनवोट करते हैं ... यह इतना बेकार है –

+5

कोई विचार नहीं है ... लेकिन अपनी परेशानी के लिए +1 लें। :) –

+4

इस बारे में बुरा हिस्सा बड़ी फ़ाइलों धाराओं के बजाय बाइट सरणियों का उपयोग करके अपने राम को उड़ाने सकता है :( – jocull

5

उपयोग कर सकते हैं यहाँ कैसे मैं पॉडकास्ट के लिए यह करना है:

 

ID  Title   Path     Summary    UploadDate 
--- -----  --------    ----------------  ----------- 
1  TestPodcast /Podcasts/ep1.mp3  A test podcast   2010-02-12 

path भंडार पॉडकास्ट की भौतिक स्थिति के लिए एक संदर्भ। मैंने फ़ाइल अपलोड भाग से निपटने के लिए File Uploads with ASP.NET MVC पर स्कॉट हंसेलमैन से एक पोस्ट का उपयोग किया।

+0

मिला यह एक छोटा अनुप्रयोग के लिए ठीक हो सकता है, लेकिन बैकअप आवश्यकताओं के साथ एक जटिल ऐप मानते हुए और फाइलें समय के साथ बदलती हैं, आप – ozz

+1

@Ozz पर एक विशिष्ट बिंदु पर वापस नहीं पहुंच पाएंगे, आप बिल्कुल सही हैं, लेकिन यह समय के साथ बदलने वाली फ़ाइलों के लिए नहीं है। उम्मीद है कि एक बार जब आप पॉडकास्ट जारी करेंगे, तो आप वापस नहीं जा रहे हैं और बस उस पॉडकास्ट को ओवरराइट कर रहे हैं। –

संबंधित मुद्दे