Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件保存在Mongodb';在Windows7上,使用pymongo生成的GridFS会生成一个截断文件-Python2.7_Python_Windows_Mongodb_Pymongo_Gridfs - Fatal编程技术网

将文件保存在Mongodb';在Windows7上,使用pymongo生成的GridFS会生成一个截断文件-Python2.7

将文件保存在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

使用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: 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')  )