Django के साथ एक अपलोड की गई फ़ाइल की सामग्री(बचत के बजाय) प्रदर्शित करना



django-forms django-file-upload (1)

डॉक्स: http://docs.djangoproject.com/en/dev/topics/http/file-uploads/

लघु संस्करण:

  1. आपके अपलोड फ़ॉर्म में फॉर्म होने चाहिए forms.FileField फ़ील्ड
  2. जब फ़ॉर्म सबमिट किया जाता है, तो यह एक यूआरएल के पास जाता है जो आपके द्वारा लिखी गई दृश्य फंक्शन में जाता है। यह दृश्य फ़ंक्शन HttpRequest (आमतौर पर नामित request ) लेता है।
  3. request.FILES[] से फ़ाइल लाएं। request.FILES[]

उदाहरण के लिए, यदि आपका फ़ॉर्म है:

upFile = forms.FileField

इसके बाद आपका दृश्य फाइल को प्राप्त कर सकता है:

def uploadView(request):
    upFile = request.FILES["upFile"]

जहां upFile एक UploadedFile ऑब्जेक्ट है, जो कि फ़ाइल की तरह ऑब्जेक्ट नहीं है UploadedFile में निम्न गुण हैं:

  • name : अपलोड की गई फ़ाइल का नाम
  • size : बाइट्स में आकार

और निम्नलिखित विधियां:

  • read() : संपूर्ण फ़ाइल पढ़ें और स्ट्रिंग के रूप में लौटें शायद आपके लिए अच्छा है, लेकिन 2.5 MB से अधिक फ़ाइलों के लिए अनुशंसित नहीं है।
  • multiple_chunks() : यदि फाइल को एकाधिक विखंडू के रूप में नियंत्रित किया जाना चाहिए तो True हो जाता है
  • chunks() : एक जनरेटर (एक इटरेटर की तरह उपयोग करें) देता है जो एक समय में फाइल डेटा को एक हिस्सा देता है।

इसलिए, उदाहरण को जारी रखते हुए, अगर आप फ़ाइल को डिस्क पर सहेजना चाहते थे, तो आप लिख सकते हैं:

outFile = open("/tmp/uploadTest.txt", "w")
if not upFile.multiple_chunks():
    outFile.write(upFile.read())
else:
    for chunk in upFile.chunks():
        outFile.write(chunk)
outFile.close()

आपके मामले में, आप शायद एक त्रुटि संदेश दिखा सकते हैं और फ़ाइल को त्याग कर सकते हैं यदि multiple_chunks() रिटर्न रिटर्न करता है, क्योंकि आप संभवत: आपके पेज पर 2.5 एमबी के टेक्स्ट को नहीं डाल सकते हैं।

संपादित करें: ठीक है, जब मेरा जवाब लिख रहा था तो आपका सवाल पूरी तरह बदल गया था इसलिए, पृष्ठ में फ़ाइल की सामग्री को कैसे रखा जाए, और फ़ाइल संभालने पर 2.5 एमबी से अधिक नहीं है, तो आपका दृश्य फ़ंक्शन ऐसा दिखाई दे सकता है:

def uploadView(request):
    upFile = request.FILES["upFile"]
    context = {}
    if upFile.multiple_chunks():
        context["uploadError"] = "Uploaded file is too big (%.2f MB)." % (upFile.size,)
    else:
        context["uploadedFile"] = upFile.read()
    return render_to_response('fileUploadPage.html', context)

बेशक जोड़ना, जो कुछ भी आप को देखने की जरूरत है उसे प्रसंस्करण।

फिर आपके fileUploadPage.html टेम्पलेट को कहीं न कहीं होना चाहिए:

<div id="uploaded">
    {% if uploadError %}
    <span class="error">{{ uploadError }}</span>
    {% else %}
    {{ uploadedFile }}
    {% endif %}
</div>

2 संपादित करें: डॉमिनिक का एक अच्छा मुद्दा है form टैग सही सेट करने के लिए यहां जेनेरिक टेम्पलेट कोड है इस रूप में टेम्पलेट में इसका प्रयोग करें:

<form method="post" action="{% url uploadFile %}"
{% if form.is_multipart %}
    enctype="multipart/form-data"
{% endif %}>
{{ form }}
</form>

आपके मामले में, क्योंकि आपको पता है कि फॉर्म में उसमें एक फाइल होगी, आप if ब्लॉक को खो सकते हैं:

<form method="post" action="{% url uploadFile %}" enctype="multipart/form-data">
{{ form }}
</form>

नोट: {% url ___ %} कमांड यूआरएल को एक दृश्य या नामित यूआरएल के लिए रखा जाएगा। पैरामीटर या तो आपके urls.py फाइल में इस्तेमाल किए जाने वाले दृश्य फ़ंक्शन का नाम है या url ऑब्जेक्ट को दिए गए नाम की तरह है:

urlpatterns = patterns('',
    url('^uploadform$', 'myapp.views.uploadFormView', name='uploadForm'),
    url('^upload$', 'myapp.views.uploadView', name='uploadFile'),
    # ...
)

https://src-bin.com

मैं FileField के साथ एक फ़ॉर्म कैसे बना सकता हूं, जहां अपलोड की गई फ़ाइल सहेजा नहीं जायेगी बल्कि इसकी पाठ सामग्री निकाली और प्रदर्शित की जाएगी?





django-file-upload