将文件保存在Mongodb';在Windows7上,使用pymongo生成的GridFS会生成一个截断文件-Python2.7
使用pymongo在Mongodb的GridFS中保存文件会导致文件被截断将文件保存在Mongodb';在Windows7上,使用pymongo生成的GridFS会生成一个截断文件-Python2.7,python,windows,mongodb,pymongo,gridfs,Python,Windows,Mongodb,Pymongo,Gridfs,使用pymongo在Mongodb的GridFS中保存文件会导致文件被截断 from pymongo import MongoClient import gridfs import os #just to make sure we aren't crazy, check the filesize on disk: print os.path.getsize( r'owl.jpg' ) #add the file to GridFS, per the pymongo documentation
from pymongo import MongoClient
import gridfs
import os
#just to make sure we aren't crazy, check the filesize on disk:
print os.path.getsize( r'owl.jpg' )
#add the file to GridFS, per the pymongo documentation: http://api.mongodb.org/python/current/examples/gridfs.html
db = MongoClient().myDB
fs = gridfs.GridFS( db )
fileID = fs.put( open( r'owl.jpg', 'r') )
out = fs.get(fileID)
print out.length
在Windows 7上,运行此程序会生成以下输出:
145047
864
在Ubuntu上,运行此程序会生成以下(正确)输出:
不幸的是,我正在开发的应用程序的目标是Windows操作系统
任何帮助都将不胜感激
因此,您可以更严格地复制我的示例,'owl.jpg'是从以下位置下载的:嘿,正在更改
fileID = fs.put( open( r'owl.jpg', 'r') )
致:
修复Windows 7上程序的行为。很遗憾,操作系统之间的行为有所不同。您已经得到了答案,但出于好奇: 在Windows上,附加到模式的“b”以二进制模式打开文件,因此也有类似“rb”、“wb”和“r+b”的模式Windows上的Python区分文本文件和二进制文件;在读取或写入数据时,文本文件中的行尾字符会自动轻微更改。这种对文件数据的幕后修改对于ASCII文本文件来说很好,但它会破坏JPEG或EXE文件中的二进制数据。在读取和写入此类文件时,请非常小心地使用二进制模式
即使在Linux上,我也必须用'rb'打开文件,否则会出现“'str'不支持缓冲区接口”错误Python 3要求以二进制模式打开文件,否则会出现utf解码错误(或另一个系统默认字符串解码器)
fileID = fs.put( open( r'owl.jpg', 'r') )
fileID = fs.put( open( r'owl.jpg', 'rb') )