前期准备
通过 pip 或 easy_install 安装了 pymongo 之后, 就能通过 Python 调教 mongodb 了.接着安装个 flask 用来当 web 服务器.
当然 mongo 也是得安装的. 对于 Ubuntu 用户, 特别是使用 Server 12.04 的同学, 安装最新版要略费些周折, 具体说是
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install mongodb-10gen
pip install Pillow
easy_install Pillow
正片
Flask 文件上传
Flask 官网上那个例子居然分了两截让人无从吐槽. 这里先弄个最简单的, 无论什么文件都先弄上来import flask
app = flask.Flask(__name__)
app.debug = True
@app.route('/upload', methods=['POST'])
def upload():
f = flask.request.files['uploaded_file']
print f.read()
return flask.redirect('/')
@app.route('/')
def index():
return '''
'''
if __name__ == '__main__':
app.run(port=7777)
- 注: 在
upload
函数中, 使用flask.request.files[KEY]
获取上传文件对象, KEY 为页面 form 中 input 的 name 值
保存到 mongodb
如果不那么讲究的话, 最快速基本的存储方案里只需要import pymongo
import bson.binary
from cStringIO import StringIO
app = flask.Flask(__name__)
app.debug = True
db = pymongo.MongoClient('localhost', 27017).test
def save_file(f):
content = StringIO(f.read())
db.files.save(dict(
content=bson.binary.Binary(content.getvalue()),
))
@app.route('/upload', methods=['POST'])
def upload():
f = flask.request.files['uploaded_file']
save_file(f)
return flask.redirect('/')
bson.binary.Binary
对象, 再把它扔进 mongodb 就可以了.现在试试再上传个什么文件, 在 mongo shell 中通过
db.files.find()
content
这个域几乎肉眼无法分辨出什么东西, 即使是纯文本文件, mongo 也会显示为 Base64 编码.