• 用python 实现上传文件功能


    环境 Apache + mod_python

    如文件小可以采用这个方式

    import os

    def form():
       return """\
    <html><body>
    <form enctype="multipart/form-data" action="./upload" method="post">
    <p>File: <input type="file" name="file"></p>
    <p><input type="submit" value="Upload"></p>
    </form>
    </body></html>
    """

    def upload(req):
      
       try: # Windows needs stdio set for binary mode.
          import msvcrt
          msvcrt.setmode (0, os.O_BINARY) # stdin  = 0
          msvcrt.setmode (1, os.O_BINARY) # stdout = 1
       except ImportError:
          pass

       # A nested FieldStorage instance holds the file
       fileitem = req.form['file']

       # Test if the file was uploaded
       if fileitem.filename:

          # strip leading path from file name to avoid directory traversal attacks
          fname = os.path.basename(fileitem.filename)
          # build absolute path to files directory
          dir_path = os.path.join(os.path.dirname(req.filename), 'files')
          open(os.path.join(dir_path, fname), 'wb').write(fileitem.file.read())
          message = 'The file "%s" was uploaded successfully' % fname

       else:
          message = 'No file was uploaded'
      
       return """\
    <html><body>
    <p>%s</p>
    <p><a href="./form">Upload another file</a></p>
    </body></html>
    """ % message


    如文件大时,可以分块上传,现在是改良方式

    import os

    def form():
       return """\
    <html><body>
    <form enctype="multipart/form-data" action="./upload" method="post">
    <p>File: <input type="file" name="file"></p>
    <p><input type="submit" value="Upload"></p>
    </form>
    </body></html>
    """

    # Generator to buffer file chunks
    def fbuffer(f, chunk_size=10000):
       while True:
          chunk = f.read(chunk_size)
          if not chunk: break
          yield chunk

    def upload(req):
      
       try: # Windows needs stdio set for binary mode.
          import msvcrt
          msvcrt.setmode (0, os.O_BINARY) # stdin  = 0
          msvcrt.setmode (1, os.O_BINARY) # stdout = 1
       except ImportError:
          pass

       # A nested FieldStorage instance holds the file
       fileitem = req.form['file']

       # Test if the file was uploaded
       if fileitem.filename:

          # strip leading path from file name to avoid directory traversal attacks
          fname = os.path.basename(fileitem.filename)
          # build absolute path to files directory
          dir_path = os.path.join(os.path.dirname(req.filename), 'files')
          f = open(os.path.join(dir_path, fname), 'wb', 10000)

          # Read the file in chunks
          for chunk in fbuffer(fileitem.file):
             f.write(chunk)
          f.close()
          message = 'The file "%s" was uploaded successfully' % fname

       else:
          message = 'No file was uploaded'
      
       return """\
    <html><body>
    <p>%s</p>
    <p><a href="./form">Upload another file</a></p>
    </body></html>
    """ % message



    from:http://long.objectis.net/wanglaoriji/yongpython-shixianshangzhuanwenjiangongneng

  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/dkblog/p/1980646.html
Copyright © 2020-2023  润新知