اذهب إلى المحتوى

السؤال

نشر

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

class Upload(Resource):
    def post(self):
        img = request.files['image']
        if img:
            # Store image ...
        else:
            return {"error": True, "message": "there is no file" }

وفي HTML يتم عرض حقل إدخال لرفع الملف:

<input type="file" name="img">

ولكن كيف أقوم بإستقبال ملف بإستخدام إضافة Flask-Restful عبر واجهة برمجية API وليس من خلال عنصر input؟

Recommended Posts

  • 1
نشر

يمكن تحديد مسار مجلد التحميل الافتراضي والحجم الأقصى للملفات التي تم تحميلها في إعدادات التكوين لكائن Flask.

حدد المسار إلى مجلد التحميل

app.config['UPLOAD_FOLDER']

يحدد الحجم الأقصى (بالبايت) للملفات المراد تحميلها

app.config['MAX_CONTENT_PATH']

تحتوي الشفرة التالية على قاعدة عنوان URL "/ upload" التي تعرض’upload.html "في مجلد النماذج وقاعدة عنوان URL" / upload - file "لاستدعاء وظيفة upload لمعالجة عملية التحميل.

يحتوي "upload.html" على زر اختيار ملف وزر إرسال.

<html>
   <body>
      <form action = "http://localhost:5000/uploader" method = "POST" 
         enctype = "multipart/form-data">
         <input type = "file" name = "file" />
         <input type = "submit"/>
      </form>   
   </body>
</html>

بمجرد تحديد ملف ، انقر فوق إرسال. تستدعي طريقة نشر النموذج عنوان URL "/ upload_file". ينفذ برنامج تحميل الوظيفة uploader عملية حفظ.

 كود Python لتطبيق Flask.

from flask import Flask, render_template, request
from werkzeug import secure_filename
app = Flask(__name__)

@app.route('/upload')
def upload_file():
   return render_template('upload.html')
	
@app.route('/uploader', methods = ['GET', 'POST'])
def upload_file():
   if request.method == 'POST':
      f = request.files['file']
      f.save(secure_filename(f.filename))
      return 'file uploaded successfully'
		
if __name__ == '__main__':
   app.run(debug = True)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...