文件上载问题-Python WIndows Cherypy

文件上载问题-Python WIndows Cherypy,python,windows,file-upload,cherrypy,Python,Windows,File Upload,Cherrypy,我是python和cherrypy的新手。我正在尝试使用以下代码上载文件: @cherrypy.tools.noBodyProcess() def POST(self,theFile=None): lcHDRS = {} for key, val in cherrypy.request.headers.iteritems(): lcHDRS[key.lower()] = val formFields = myFieldStorage(fp=cherrypy.

我是python和cherrypy的新手。我正在尝试使用以下代码上载文件:

@cherrypy.tools.noBodyProcess()
def POST(self,theFile=None):
    lcHDRS = {}
    for key, val in cherrypy.request.headers.iteritems():
        lcHDRS[key.lower()] = val
   formFields = myFieldStorage(fp=cherrypy.request.rfile,
                                headers=lcHDRS,
                                environ={'REQUEST_METHOD':'POST'},
                                keep_blank_values=True)

    dt = datetime.now()
    date = dt.strftime('%Y-%m-%d')
    dt = dt.strftime('%Y%m%d%H%M%S')
    theFile = formFields['theFile']
    theFile.filename = str(dt) + "file"
    shutil.copy2(theFile.file.name,os.path.join(absolutePath , theFile.filename))
    ...
    ...
我检查了路径os.path.join(绝对路径,theFile.filename),它是正确的。 问题是,该代码在Linux ubuntu上运行良好,但在windows上运行不好。 调用的错误为:已编辑

shutil.copy2(theFile.file.name,settings.UPLOAD_FILE_PATH + theFile.filename)
File "C:\Anaconda\lib\shutil.py", line 130, in copy2
copyfile(src, dst)
File "C:\Anaconda\lib\shutil.py", line 82, in copyfile
with open(src, 'rb') as fsrc:
IOError: [Errno 13] Permission denied: 'c:\\users\\username\\appdata\\local\\temp\\tmpjy3gys'
我哪里做错了?
如果您需要任何其他信息,请告诉我。

我想windows对启动该程序有UAC限制,您是否尝试过以管理员权限运行该脚本?

该问题可能与某些临时文件安全性有关,该安全性禁止通过文件名重新打开。尝试用以下内容替换
shutil.copy2
调用:

with open('/path/that/you/have/permission/to', 'wb') as f:
  shutil.copyfileobj(theFile.file, f)

您既没有提供
IOError
的完整堆栈跟踪,也没有提供可以重现问题的可运行代码段,因此很难判断出哪里出了问题。请尝试从运行代码段,并告诉我们它是否会导致相同的异常。@saaj:已更新完整的错误详细信息。+1嘿,saaj!!“开放式”很有魅力。虽然我使用的路径与以前相同。你能解释一下为什么吗?@zennith答案的第一句话不能说服你吗?例如,将警告读到或。这些都是关于防止一个单独的进程从回火您的临时文件。Python可能会使用某些特定于Windows的函数来创建无法重新打开的临时文件句柄。相应地,
shutil.copyfileobj
只读取已经打开的类文件对象。