的CherryPy得到上传文件的临时位置

文件Uppload中的CherryPy:的CherryPy得到上传文件的临时位置

def upload(self, myFile): 

out = """File name: %s, Content-Type: %"""

return out % (myFile.filename, myFile.content_type)

upload.exposed = True

从docs:

当客户端上传文件到CherryPy的应用程序,它立即放在 盘。 CherryPy会将其作为 参数传递给您公开的方法(请参阅下面的“myFile”);该arg将具有“文件”属性 ,该文件是临时上传文件的句柄。如果您希望 永久保存文件,则需要从myFile.file中读取(),并在其他位置读取write()。

如何获取上传文件的临时位置?

回答:

使用默认实体处理器无法获取临时文件的名称。但是你可以设置你自己定制的一个来确保总是创建一个临时文件(通常不是为文件< 1000字节创建的)。

要在临时文件的名称,你需要它与CustomPart类创建的NamedTemporaryFile

import tempfile 

import cherrypy as cp

class App:

@cp.expose

def index(self):

return """

<html><body>

<h2>Upload a file</h2>

<form action="upload" method="post" enctype="multipart/form-data">

filename: <input type="file" name="my_file" /><br />

<input type="submit" />

</form>

</body></html>

"""

@cp.expose

def upload(self, my_file):

return "The path is %s" % my_file.file.name

class CustomPart(cp._cpreqbody.Part):

"""

Custom entity part that it will alway create a named

temporary file for the entities.

"""

maxrambytes = 0 # to ensure that it doesn't store it in memory

def make_file(self):

return tempfile.NamedTemporaryFile()

if __name__ == '__main__':

cp.quickstart(App(), config={

'/': {

'request.body.part_class': CustomPart

}

})

当请求被默认的NamedTemporaryFile因为做你可能无法看到该文件类在关闭时立即删除文件。在这种情况下,只要请求完成。你可以添加一些睡眠电话这样和验证我刚才说:

@cp.expose 

def upload(self, my_file):

import time

cp.log.error("You have 30 seconds to open the temporary file %s" % my_file.file.name)

time.sleep(30)

return "The path is %s" % my_file.file.name

如果你真的想保存临时文件,那么你只需要在delete参数设置为FalseNamedTemporaryFile并结束了像这样:

class CustomPart(cp._cpreqbody.Part): 

"""

Custom entity part that it will alway create a named

temporary file for the entities.

"""

maxrambytes = 0 # to ensure that it doesn't store it in memory

def make_file(self):

return tempfile.NamedTemporaryFile(delete=False)

你必须确保你自己删除这些临时文件。

以上是 的CherryPy得到上传文件的临时位置 的全部内容, 来源链接: utcz.com/qa/258560.html

回到顶部