用web.py搭了一个站,用户上传一张图片后自动生成3张不同大小的缩略图,用户点击删除图片按钮后,自动把系统目录里的原图和三张缩略图删除。
图片是按日期保存的,整个目录结构如下:
-static
--upload
---post_img
----2012(年)
-----11(月)
------9(日)注:年月日都是程序自动建立的
-------20121194514_5624f3ccbc039b676ece4f74e26ad0bf.jpg(原图)
-------20121194514_5624f3ccbc039b676ece4f74e26ad0bf_1200.jpg(.crop得到的缩略图)
-------20121194514_5624f3ccbc039b676ece4f74e26ad0bf_750.jpg(.crop得到的缩略图)
-------20121194514_5624f3ccbc039b676ece4f74e26ad0bf_365.jpg(.crop得到的缩略图)
我最原先的处理方式是:删除图片时,前端传给后端python一个参数 x : "/static/upload/post_img/2012/11/9/20121194514_5624f3ccbc039b676ece4f74e26ad0bf", 也就是图片文件的一小部分路径, 然后在后台组装,再删除:
#主要代码部分:
homedir = os.getcwd()
imgPath = homedir + x
os.remove(imgPath + '.jpg')
os.remove(imgPath + '_1200.jpg')
os.remove(imgPath + '_750.jpg')
os.remove(imgPath + '_365.jpg')
但是这么做有几个缺点:
1:如果用户上传的不是.jpg文件,而是png或者gif,那么os.remove(imgPath + '.jpg')删除原图时,就会找不到路径,其他的几个1200、750、365是crop()出来的,能保证是.jpg,可以正常删除。 而如果把每个上传上来的原图都自动转成.jpg,感觉有些复杂,而且没有必要。
2:四张图要分别.remove()四次,效率低下,代码不够简洁。
所以我想,能不能向后端传两个参数,一个是图片的保存目录,即 /static/upload/post_img/2012/11/9/,一个是图片的前半部分文件名,也就是 20121194514_5624f3ccbc039b676ece4f74e26ad0bf ,然后根据这个前半部分文件名来一次性批量删除图片:只要文件名包含这个参数的,就全部删除,不管是png还是jpg、gif。
于是我重新写了一段代码:
http://gist.github.com/4043592同时,为了方便测试,我先在网站根目录里建了一个test.py文件,用来模拟网站程序对这个目录的操作。test.py代码和上面的一样,只不过是把 part_name 和 path 这两个网站前端传过来的参数写死了而已。
http://gist.github.com/4043596但是很快我发现有问题,在目录下运行test.py时能正常删除文件(原图和3个缩略图一起批量删除),但是网站程序只能删除一个原图。
这到底是什么一回事?是跟文件的权限有关系吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/52172
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.