سؤال

وأنا أبحث عن وسيلة لإيداع ملف إلى S3. أنا باستخدام جانغو. أنا حاليا باستخدام مكتبة الثعبان الأمازون لتحميل جنبا إلى جنب مع التعليمات البرمجية التالية:

والشخصي:

def submitpicture(request):
    fuser = request.session["login"]

    copied_data = request.POST.copy()
    copied_data.update(request.FILES)
    content_type = copied_data['file'].get('content-type')
    ffile = copied_data['file']['content']
    key = '%s-%s' % (fuser, ''.join(copied_data['file']['filename'].split(' ')))
    site_s3.save_s3_data(key, ffile, content_type)

وقالب:

<form action="/submitpicture/" method="POST">
    <input type="file" id="file" name="file" />
    <input type="submit" value="submit" />
</form>

ولكن، عندما كنت في الواقع محاولة لتشغيله أحصل على الخطأ التالي:

"Key 'file' not found in <QueryDict: {}>"
#MultiValueDictKeyError

وأنا في الحقيقة لا أرى ما أفعله خطأ. يمكن للشخص لي نقطة في الاتجاه الصحيح؟

وتحرير: فقط في حالة شخص يتساءل، وأنا تخطط لإضافة بعض التحقق من صحة بعد أن أحصل على عمل تحميل الفعلي.

هل كانت مفيدة؟

المحلول

وسيكون لديك لتقديم السمة enctype إلى العنصر نموذج (لقد تم لعض من قبل هذا من قبل). على سبيل المثال، يجب أن علامة نموذج مظهرك مثل:

<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >

وبدون enctype، وسوف تجد نفسك مع request.FILES فارغة.

نصائح أخرى

وبدلا من القيام بذلك يدويا وأود أن نلقي نظرة على الخلفية التخزين وقد كتب ديفيد Larlet لجانغو، <وأ href = "https://django-storages.readthedocs.io/en/latest/" يختلط = "نوفولو noreferrer "> جانغو-المخازن

وإضافة enctype = "متعدد الأجزاء / شكل بيانات" يبدو وكأنه شيء يستحق الذكر في قسم "ملف التحميلات" من مستندات جانغو (<لأ href = "http://docs.djangoproject.com/en/dev/ المواضيع / HTTP / الملفات المرفوعه / "يختلط =" نوفولو noreferrer "> http://docs.djangoproject.com/en/dev/topics/http/file-uploads/ ). الأفكار؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top