最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python tornado上傳文件的功能

 更新時(shí)間:2020年03月26日 10:55:01   作者:dutsoft  
這篇文章主要介紹了Python tornado上傳文件的功能,代碼分為普通上傳和ajax上傳,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Tornado是一種 Web 服務(wù)器軟件的開(kāi)源版本。Tornado 和主流Web 服務(wù)器框架(包括大多數(shù) Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器,而且速度相當(dāng)快。

得利于其非阻塞的方式和對(duì)epoll的運(yùn)用,Tornado 每秒可以處理數(shù)以千計(jì)的連接,因此 Tornado 是實(shí)時(shí) Web 服務(wù)的一個(gè) 理想框架。

在web開(kāi)發(fā)過(guò)程中,文件上傳是經(jīng)常用到的功能,比如上傳附件,上傳照片等。下面我們來(lái)介紹一下利用tornado 來(lái)實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能。

普通上傳

# coding: utf-8
import tornado.ioloop
import tornado.web
import shutil
import os
import json
class FileUploadHandler(tornado.web.RequestHandler):
  def get(self):
    self.write('''
<html>
 <head><title>Upload File</title></head>
 <body>
  <form action='file' enctype="multipart/form-data" method='post'>
  <input type='file' name='file'/><br/>
  <input type='submit' value='submit'/>
  </form>
 </body>
</html>
''')

  def post(self):
    ret = {'result': 'OK'}
    upload_path = os.path.join(os.path.dirname(__file__), 'files') # 文件的暫存路徑
    file_metas = self.request.files.get('file', None) # 提取表單中‘name'為‘file'的文件元數(shù)據(jù)

    if not file_metas:
      ret['result'] = 'Invalid Args'
      return ret

    for meta in file_metas:
      filename = meta['filename']
      file_path = os.path.join(upload_path, filename)

      with open(file_path, 'wb') as up:
        up.write(meta['body'])
        # OR do other thing

    self.write(json.dumps(ret))


app = tornado.web.Application([
  (r'/file', FileUploadHandler),
])

if __name__ == '__main__':
  app.listen(8080)
  tornado.ioloop.IOLoop.instance().start()

采用ajax上傳

采用ajax上傳,需要修改一下前端發(fā)送請(qǐng)求的方式??蓞⒄杖缦路绞剑?/p>

  <html>
   <head><title>Upload File</title>
   <script type="text/javascript" src="/www/static/jquery.min.js"></script>
   </head>
   <body>
    <form id='upload' action='upload' enctype="multipart/form-data" method='post'>
    <input type='file' name='file'/><br/>
    <input type='button' id='submit' value='submit'/>
    </form>
   </body>
   <script>
    $('#submit').click(function(){
      var form = $('form')[0];
      var formData = new FormData(form);
      formData.append('image', $('input[type=file]')[0].files[0]);
      $.ajax({
        url: '/file/upload',
        data: formData,
        type: 'POST',
        contentType: false,
        processData: false,
        success: function(data){
          var obj = jQuery.parseJSON(data);
          alert(obj.result);
          // TODO
        },
        error: function(data){
          var obj = jQuery.parseJSON(data);
          alert(data.result);
        }
      })
    });

   </script>
  </html>

注意

tornado處理文件上傳時(shí),會(huì)把整個(gè)文件放在內(nèi)存中。
如果有上傳大文件的需求,一般會(huì)使用nginx的文件上傳模塊 (第三方模塊,需要編譯)。

總結(jié)

到此這篇關(guān)于Python tornado上傳文件的功能的文章就介紹到這了,更多相關(guān)Python tornado上傳文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python將圖片中扭曲矩形的復(fù)原

    利用Python將圖片中扭曲矩形的復(fù)原

    這篇文章主要給大家介紹了關(guān)于如何利用Python將圖片中扭曲矩形復(fù)原的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Pycharm+Flask零基礎(chǔ)項(xiàng)目搭建入門(mén)的實(shí)現(xiàn)

    Pycharm+Flask零基礎(chǔ)項(xiàng)目搭建入門(mén)的實(shí)現(xiàn)

    本文主要介紹了Pycharm+Flask零基礎(chǔ)項(xiàng)目搭建入門(mén)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python的詞法分析與語(yǔ)法分析

    Python的詞法分析與語(yǔ)法分析

    這篇文章主要介紹了Python的詞法分析(Lexical Analysis)與 語(yǔ)法分析(Syntactic Analysis),需要的朋友可以參考下
    2013-05-05
  • Django模板過(guò)濾器和繼承示例詳解

    Django模板過(guò)濾器和繼承示例詳解

    初入python和django做項(xiàng)目,遇到很多前端頁(yè)面代碼冗余的情況,特別是頭部和腳部,代碼都是一樣的,所以下面這篇文章主要給大家介紹了關(guān)于Django模板過(guò)濾器和繼承的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • opencv 分類(lèi)白天與夜景視頻的方法

    opencv 分類(lèi)白天與夜景視頻的方法

    最近有個(gè)數(shù)據(jù)需要分類(lèi)處理,是一批含有白天跟夜晚的視頻數(shù)據(jù),需要進(jìn)行區(qū)分開(kāi)來(lái),本文就來(lái)實(shí)現(xiàn),感興趣的可以了解一下
    2021-06-06
  • Python+OpenCV實(shí)戰(zhàn)之實(shí)現(xiàn)文檔掃描

    Python+OpenCV實(shí)戰(zhàn)之實(shí)現(xiàn)文檔掃描

    這篇文章主要為大家詳細(xì)介紹了Python+Opencv如何實(shí)現(xiàn)文檔掃描的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • 如何解決jupyter?notebook中文亂碼問(wèn)題

    如何解決jupyter?notebook中文亂碼問(wèn)題

    這篇文章主要介紹了如何解決jupyter?notebook中文亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 使用Python的turtle模塊畫(huà)圖的方法

    使用Python的turtle模塊畫(huà)圖的方法

    這篇文章主要介紹了使用Python的turtle模塊畫(huà)圖的方法,涉及turtle簡(jiǎn)介,運(yùn)動(dòng)命令,畫(huà)筆控制命令的分享,以及具體操作的步驟,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python?Panda中索引和選擇?series?的數(shù)據(jù)

    Python?Panda中索引和選擇?series?的數(shù)據(jù)

    這篇文章主要介紹了Python?Panda中索引和選擇series的數(shù)據(jù),文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Python基礎(chǔ)實(shí)戰(zhàn)總結(jié)

    Python基礎(chǔ)實(shí)戰(zhàn)總結(jié)

    今天要給大家介紹的是Python基礎(chǔ)實(shí)戰(zhàn),本文主要以舉例說(shuō)明講解:?jiǎn)栴}的關(guān)鍵點(diǎn)就是在于構(gòu)造姓名,學(xué)號(hào)和成績(jī),之后以字典的形式進(jìn)行寫(xiě)入文件。這里準(zhǔn)備兩個(gè)列表,一個(gè)姓,一個(gè)名,之后使用random庫(kù)進(jìn)行隨機(jī)字符串拼接,得到姓名,需要的朋友可以參考一下
    2021-10-10

最新評(píng)論

定远县| 陈巴尔虎旗| 吴川市| 方正县| 织金县| 安庆市| 日土县| 图片| 盐源县| 鞍山市| 肥城市| 临泽县| 襄汾县| 溆浦县| 黔江区| 岑巩县| 射洪县| 九江县| 平阴县| 邮箱| 渑池县| 绥滨县| 鄂州市| 扬州市| 霍邱县| 大关县| 盐池县| 垫江县| 利津县| 陕西省| 库伦旗| 威远县| 新宁县| 腾冲县| 班玛县| 闻喜县| 开江县| 巴里| 沂源县| 阿坝县| 寿光市|