मैंने उदाहरण देखा जो pycurl का इस्तेमाल करते थे, लेकिन यह सुनिश्चित नहीं हो सका कि यह किस तरह से जाने का तरीका है? कुछ उदाहरण मदद करेंगे। धन्यवाद।एक HTML फॉर्म से पायथन-टॉरनाडो के साथ एक छवि को अपलोड करने के लिए कैसे?
उत्तर
यह सरल है:
<form action="/file" methods="POST"><!--your code--></form>
अजगर में
:
class FileHandler(tornado.web.RequestHandler):
# get post data
file_body = self.request.files['filefieldname'][0]['body']
img = Image.open(StringIO.StringIO(file_body))
img.save("../img/", img.format)
लेकिन यह सिफारिश नहीं कर रहा है, क्योंकि सभी अपलोड किए गए डेटा रैम में लोड किया जाता है; सबसे अच्छा तरीका nginx लोडअप मॉड्यूल का उपयोग है, लेकिन यह जटिल है।
यहां demo application है जो टर्ननाडो अपलोड लागू करता है।
यहाँ सर्वर कोड है:
import tornado.httpserver, tornado.ioloop, tornado.options, tornado.web, os.path, random, string
from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", IndexHandler),
(r"/upload", UploadHandler)
]
tornado.web.Application.__init__(self, handlers)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.render("upload_form.html")
class UploadHandler(tornado.web.RequestHandler):
def post(self):
file1 = self.request.files['file1'][0]
original_fname = file1['filename']
extension = os.path.splitext(original_fname)[1]
fname = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(6))
final_filename= fname+extension
output_file = open("uploads/" + final_filename, 'w')
output_file.write(file1['body'])
self.finish("file" + final_filename + " is uploaded")
def main():
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
केवल एक चीज है, तो आप इस कोड, उस फ़ाइल self.request.files[<file_input_name>][0]
में स्थित सामग्री से समझना होगा। सुनिश्चित हो, उस रूप enctype="multipart/form-data"
है -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Tornado Upload Application</title>
</head>
<body>
<p><h1>Tornado Upload App</h1></p>
<form enctype="multipart/form-data" action="/upload" method="post">
File: <input type="file" name="file1" />
<br />
<br />
<input type="submit" value="upload" />
</form>
जब फाइलों के साथ काम:
यहाँ एचटीएमएल कोड है।
एक छोटी टिप्पणी: python3.x में आपको फ़ाइल को बाइनरी मोड लिखने की आवश्यकता है। तो यह होगा: 'output_file = open (" अपलोड/"+ final_filename, 'wb') 'यह स्ट्रिंग्स (यूनिकोड) और पायथन स्ट्रिंग्स के विभिन्न हैंडलिंग के कारण है python3 में। [यहां और अधिक] (https://stackoverflow.com/questions/6224052/what-is-the-difference-between-a-string-and-a-byte-string) – klaas
पिछला कोड खराब फ़ाइल नाम और गलत एन्कोडिंग लौटा दिया। के बाद कोड काम करता है:
import tornado.httpserver, tornado.ioloop, tornado.options, tornado.web, os.path, random, string
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", IndexHandler),
(r"/upload", UploadHandler)
]
tornado.web.Application.__init__(self, handlers)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.render("tornadoUpload.html")
class UploadHandler(tornado.web.RequestHandler):
def post(self):
file1 = self.request.files['file1'][0]
original_fname = file1['filename']
output_file = open("uploads/" + original_fname, 'wb')
output_file.write(file1['body'])
self.finish("file " + original_fname + " is uploaded")
settings = {
'template_path': 'templates',
'static_path': 'static',
"xsrf_cookies": False
}
application = tornado.web.Application([
(r"/", IndexHandler),
(r"/upload", UploadHandler)
], debug=True,**settings)
print "Server started."
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
मैं चल रहा था मुसीबत में जब [ ''] वाक्य रचना, यकीन नहीं क्यों के साथ फ़ाइलें गुण तक पहुँचता है, लेकिन मैं वाक्य रचना डॉट में स्विच करने और डेटा को पढ़ने में सक्षम था। मैं एक विंडोज़ मशीन पर हूं इसलिए मुझे 'ओपन ("स्टेटिक/पब्लिक /" + फाइल_नाम,' डब्ल्यू ')' टू 'ओपन ("स्टेटिक/पब्लिक /" + फाइल_नाम,' डब्ल्यूबी ')' को भी बदलना पड़ा। 'Wb' के बिना फाइल दूषित हो रही थीं।
def uploadFile(self,input_name,file_type):
a_file = self.request.files[input_name][0]
extension = os.path.splitext(a_file.filename)[1]
if file_type is 'photo':
type_list = ['.png','.jpg','.jpeg','.gif']
elif file_type is 'attachment':
type_list = ['.pdf','.doc','.docx','.xls']
if extension in type_list:
file_name = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(16))
output_file = open("static/public/" + file_name + extension, 'wb')
output_file.write(a_file.body)
return (a_file.filename + " has been uploaded.")
tornado.web.RequestHandler
self.request.files
विधि है। इसका परिणाम
{u'file': [{'body':FILEBODY, 'content_type':CONTENT_TYPE, 'filename': FILENAME}],...}
- 1. एचटीएमएल: एक फॉर्म को संरेखित करने के लिए कैसे करें
- 2. फोनगैप के साथ एक छवि अपलोड करें: InvalidCastException
- 3. AJAX के साथ एक HTML 5 फॉर्म सबमिट करें?
- 4. वेब-फॉर्म अपलोड के साथ एक हडसन/जेनकींस जॉब बनाएं
- 5. एक HTML फॉर्म
- 6. एक HTML फॉर्म
- 7. XMLHttprequest के साथ एक फ़ाइल अपलोड करना - मल्टीपार्ट/फॉर्म-डेटा
- 8. जावास्क्रिप्ट के साथ एक छवि को कैसे सहेजने के लिए?
- 9. जावास्क्रिप्ट के साथ एक HTML फॉर्म को विश्वसनीय रूप से सबमिट कैसे करें?
- 10. छवि अपलोडर के साथ मल्टी स्टेप फॉर्म
- 11. फेसबुक पर एक छवि अपलोड करने के लिए (HTML कैनवास से डेटा-यूआरएल के रूप में दिया गया) कैसे अपलोड करें?
- 12. एक फॉर्म विंडो में HTML सहायता को एम्बेड करने के लिए कैसे करें
- 13. सीएसएस एक छवि को बदलने के लिए
- 14. PHP फॉर्म के माध्यम से एफ़टीपी अपलोड
- 15. एस 3 अपलोड करने के लिए एक रेल पोस्ट फॉर्म के लिए नीति और हस्ताक्षर मुद्दे
- 16. एक ग्रेड-आउट HTML फॉर्म कैसे बनाएं?
- 17. क्या यह एक HTML फॉर्म के अंदर एक HTML फॉर्म है?
- 18. छवि एक फॉर्म
- 19. एक HTML फॉर्म के हिस्से के रूप में डेटाबेस
- 20. ओपनसीवी में एक छवि को तेज करने के लिए कैसे?
- 21. फॉर्म पोस्ट करने के लिए jquery का उपयोग करने के लिए आप मौजूदा HTML फॉर्म को कैसे ओवरराइड करते हैं?
- 22. अनुलग्नक के साथ फॉर्म
- 23. ज़ेंड फॉर्म विवरण के साथ कस्टम HTML टैग कैसे जोड़ें
- 24. पीडीएफबॉक्स - एक छवि से पीडीएफ उत्पन्न करने के साथ समस्या
- 25. को अक्षम करने से स्वत: अपलोड करने अपलोड
- 26. एक HTML बटन को अक्षम करने के लिए Jquery
- 27. एक HTML फॉर्म के साथ एक perl cgi स्क्रिप्ट में सरणी कैसे पास करें?
- 28. Django Ajax एक फॉर्म के बाहर अपलोड करें
- 29. वर्तमान फॉर्म मानों के साथ आंतरिक HTML
- 30. PHPQuery के साथ एक HTML टैग को कैसे निकालें?
यहां डीआईआर() आवश्यक क्यों है? मैं /../img/ निर्देशिका – gora
@ अनिरुद्धजाना में फ़ाइल अपलोड करना चाहता हूं, केवल कंसोल के लिए आउटपुट डेटा आवश्यक नहीं है। –
@ अनिरुद्ध जना क्षमा करें, कोड त्रुटि है। मैंने संशोधित किया –