webapp2 - 只读文件系统错误
webapp2 - read-only file system error
我正在使用 Python (webapp2) & Jinja2 开发一个 Google App Engine 应用程序,我正在尝试创建一个 PDF 文件reportlab 图书馆。
示例:
from reportlab.pdfgen import canvas
class pdf(webapp2.RequestHandler):
def get(self):
x = 50
y = 750
c = canvas.Canvas("file.pdf")
c.drawString(x*5,y,"Output")
c.line(x,y-10,x*11,y-10)
c.save()
当我 运行 服务器时,我收到以下错误:
raise IOError(errno.EROFS, 'Read-only file system', filename)
IOError: [Errno 30] Read-only file system: u'file.pdf'
您不能写入 appengine 文件系统 -- 毕竟,由于您有多台机器(并且您不能保证始终使用相同的机器),您会写入哪台机器的文件系统?
但是,报告实验室 canvas 似乎接受了一个打开的文件对象。我不能保证这会起作用,但您可以尝试传递一个打开的类似文件的对象。例如io.BytesIO
甚至 webapp2.Response.out
。
import io
class pdf(webapp2.RequestHandler):
def get(self):
x = 50
y = 750
c = canvas.Canvas(self.response.out)
c.drawString(x*5,y,"Output")
c.line(x,y-10,x*11,y-10)
c.save()
我使用 StringIO:
让它工作
from reportlab.pdfgen import canvas
# Import String IO which is a
# module that reads and writes a string buffer
# cStringIO is a faster version of StringIO
from cStringIO import StringIO
class pdf(webapp2.RequestHandler):
def get(self):
pdfFile = StringIO()
x = 50
y = 750
c = canvas.Canvas(pdfFile)
c.drawString(x*5,y,"Output")
c.line(x,y-10,x*11,y-10)
c.save()
self.response.headers['content-type'] = 'application/pdf'
self.response.headers['Content-Disposition'] = 'attachment; filename=file.pdf'
self.response.out.write(pdfFile.getvalue())
我正在使用 Python (webapp2) & Jinja2 开发一个 Google App Engine 应用程序,我正在尝试创建一个 PDF 文件reportlab 图书馆。
示例:
from reportlab.pdfgen import canvas
class pdf(webapp2.RequestHandler):
def get(self):
x = 50
y = 750
c = canvas.Canvas("file.pdf")
c.drawString(x*5,y,"Output")
c.line(x,y-10,x*11,y-10)
c.save()
当我 运行 服务器时,我收到以下错误:
raise IOError(errno.EROFS, 'Read-only file system', filename)
IOError: [Errno 30] Read-only file system: u'file.pdf'
您不能写入 appengine 文件系统 -- 毕竟,由于您有多台机器(并且您不能保证始终使用相同的机器),您会写入哪台机器的文件系统?
但是,报告实验室 canvas 似乎接受了一个打开的文件对象。我不能保证这会起作用,但您可以尝试传递一个打开的类似文件的对象。例如io.BytesIO
甚至 webapp2.Response.out
。
import io
class pdf(webapp2.RequestHandler):
def get(self):
x = 50
y = 750
c = canvas.Canvas(self.response.out)
c.drawString(x*5,y,"Output")
c.line(x,y-10,x*11,y-10)
c.save()
我使用 StringIO:
让它工作from reportlab.pdfgen import canvas
# Import String IO which is a
# module that reads and writes a string buffer
# cStringIO is a faster version of StringIO
from cStringIO import StringIO
class pdf(webapp2.RequestHandler):
def get(self):
pdfFile = StringIO()
x = 50
y = 750
c = canvas.Canvas(pdfFile)
c.drawString(x*5,y,"Output")
c.line(x,y-10,x*11,y-10)
c.save()
self.response.headers['content-type'] = 'application/pdf'
self.response.headers['Content-Disposition'] = 'attachment; filename=file.pdf'
self.response.out.write(pdfFile.getvalue())