Python: Errno 22 无效参数

0 投票
1 回答
3948 浏览
提问于 2025-04-18 00:24

我正在用Python(2.7.5)和Django(1.6.1)把一个附件保存到一个文件夹里。在Linux机器上运行得很好。但是当我在Windows上执行这个项目时,出现了以下错误。

[Errno 22] Invalid argument
Request Method: POST
Request URL:    http://127.0.0.1:8000/save_partner
Django Version: 1.6.1
Exception Type: OSError
Exception Value:    
[Errno 22] Invalid argument
Exception Location: C:\Python27\lib\site-packages\django\core\files\storage.py in    _save, line 199
Python Executable:  C:\Python27\python.exe
Python Version: 2.7.6
Python Path:    
['C:\\Projects\\customer',
'C:\\Python27\\lib\\site-packages\\distribute-0.6.49-py2.7.egg',
'C:\\Python27\\lib\\site-packages\\pymongo-2.6.3-py2.7-win-amd64.egg',
'C:\\Windows\\system32\\python27.zip',
'C:\\Python27\\DLLs',
'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27',
'C:\\Python27\\lib\\site-packages',
'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info']
Server time:    Sat, 29 Mar 2014 12:53:35 +0530    

错误出现在default_storage(最后一行)

for i in request.FILES.getlist('avtar'):
    avatarName = i.name
    filepath='avatars/'+date+'_'+avatarName
    address = settings.MEDIA_ROOT+filepath
    path = refine(address)
    avtar_path=path
    default_storage.save("%s"%(filepath), ContentFile(i.read()))

default_storage.save("%s"%(filepath), ContentFile(i.read()))

default_storage是从Django导入的

from django.core.files.storage import default_storage

为什么在Windows 7上不工作呢?

1 个回答

1

你是怎么填充 filepath 的?很可能你是按照Linux的文件路径规则来构建的。Linux使用正斜杠(/)作为路径分隔符,而Windows则使用反斜杠(\)。建议使用Python的 os.path 模块来创建文件路径,这样可以在不同的操作系统上都能正常使用。

#prints spam\egg on Windows and spam/egg on Linux
print os.path.join('spam', 'egg')

撰写回答