我想允许我的用户将HTML内容上传到我的AppEngine网络应用。但是,如果我使用Blobstore上传所有文件(HTML文件,css文件,图像等),则会导致问题,因为所有指向其他文件(页面,资源)的链接都无法正常工作。
我看到两种可能性,但它们都不是很漂亮,我想避免使用它们:
浏览html文件中的所有链接,并将其更改为相关的blob键。
保存文件和blob密钥之间的映射,捕获所有重定向并提供blob(可能导致同名文件出现问题)。
如何更好地解决这个问题,而无需重新检查用户的文件?
答案 0 :(得分:1)
由于app引擎在多台服务器上运行您的内容,因此您无法写入文件系统。你可以做的是让他们上传一个包含他们的html,css,js,图像等的zip文件...来自python的zipfile模块在appengine中可用,因此你可以解压缩这些文件,并单独存储它们。这样,您就知道了zip的目录结构。这允许您创建blobstore中内容的相对路径的映射。我没有足够的zipfile经验来写一个完整的例子,我希望有经验的人可以编辑我的答案,或用例子创建一个新答案。
答案 1 :(得分:0)
保存映射是此处的最佳选择。您需要以某种方式识别一组文件,因为多个用户可以上传具有相同名称的文件,然后将唯一的路径名与该组中的每个文件相关联。您可以使用键名使其成为一个简单的数据存储区,以查找与给定路径关联的blob。不需要重定向 - 只需使用标准的Blobstore服务方法设置blobstore标头,让App Engine为用户提供blob。
另一个选择是上传一个拉链,正如弗雷德里克所说。不需要单独解压缩和存储文件 - 您可以直接在blobstore中的zip中提供它们,就像this demo app那样。