मेरे पास एक आरईएसटी एपीआई है जिसके लिए अस्थायी फाइलों के लिए एक सामान्य फ़ाइल अपलोडर होना आवश्यक है। समस्या यह है कि ये फ़ाइलें UI के कई हिस्सों से आ सकती हैं और उन सभी हिस्सों में फ़ाइल इनपुट के लिए अलग-अलग नाम गुण हैं जो फ़ाइल भेजने के लिए ज़िम्मेदार हैं।

उदाहरण के लिए:

<input type="file" name={"image"} /> // Somewhere in the UI in a form
<input type="file" name="video" /> // somewhere else in the UI in a different form, or possibly a different UI even

उदाहरण के लिए, मेरे पास 2 इनपुट फ़ील्ड हैं जिन्हें अपनी फ़ाइलों को उसी मार्ग पर भेजने की आवश्यकता है, लेकिन उनका एक अलग नाम है। मान लें कि नाम अलग-अलग हो सकता है और यूआई में होने वाले सभी नामों को निर्धारित करने के लिए किसी प्रकार के स्विच/केस या यदि/अन्य तर्क लिखने का कोई तरीका नहीं है क्योंकि अलग-अलग लोगों द्वारा बनाए गए कई यूआई हैं। मुझे इसे यथासंभव सार्वभौमिक बनाने की आवश्यकता है।

यदि मैं उस इनपुट फ़ील्ड का नाम नहीं जानता जिसका उपयोग अनुरोध में फ़ाइल की पहचान करने के लिए किया जाता है, तो मैं request.files डिक्टोनरी से फ़ाइल कैसे प्राप्त करूं? मैंने फ़ाइल मुद्रित करने का प्रयास किया है लेकिन मुझे एक खाली निर्देश मिलता है।

मैंने request.files dict के माध्यम से एक for in लूप करने की कोशिश की है:

files = request.files
print(files["image"]
for f in files:
    print(f)

लेकिन यह काम नहीं किया। यह पुष्टि करने के बावजूद कि फ़ाइल लाइन 2 पर प्रिंट के साथ अनुरोध में है, मुझे अभी एक खाली निर्देश मिला है।

सामग्री प्रकार multipart form-data है। यहां बताया गया है कि मैं फॉर्म डेटा कैसे उत्पन्न करता हूं:

const data = new FormData()
data.append(e.target.name, e.target.files[0])

लेकिन यह UI के आधार पर भिन्न हो सकता है।

Tl; dr: मुझे request.files डिक्शनरी से किसी भी फाइल को फिर से प्राप्त करने में सक्षम होना चाहिए, बिना उस नाम को जाने जिसके फाइल अपलोड की गई थी।

-1
Dimitar Dev 6 नवम्बर 2020, 13:07

1 उत्तर

सबसे बढ़िया उत्तर

HTML फ़ाइल में दिए गए संबंधित इनपुट नामों को देखने के लिए यहां कोड का टुकड़ा है।

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/",methods=['GET','POST'])
def home():
    if request.method == "POST":
        for i in request.files:
            print(i)
    return render_template("index.html")

if __name__ == "__main__":
    app.run(debug=True)

और यहाँ टेम्पलेट फ़ाइल है (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test App</title>
</head>
<body>
    
    <form action="/" method="POST" enctype='multipart/form-data'>
        <input name="unnamedfile1" type="file">
        <input name="unknownfile2" type="file">
        <input type="submit">
    </form>
</body>
</html>

फ़ॉर्म सबमिट करने के बाद का आउटपुट यहां दिया गया है:
यहां छवि विवरण दर्ज करें

1
Aman Neo 6 नवम्बर 2020, 13:53