SAE python+chrome扩大快速存储喜好的(可做图床)
添加时间:2013-5-23 点击量:
想必大师都知道sina推了一个叫Sina App Engine(SAE)的器材,就是仿照google的GAE啦.这个器材可以做免费的办事器用,SAE比来支撑了python,作为一个业余的python爱好者,天上掉下的馅饼岂有不吃之理?
本屌的业余爱好就是看微博,糗百上的搞笑段子,一碰着经典搞笑的就想保存下来留作日后慢慢观赏。所以呢,我就在SAE上用python搭了一个小网站,上传些日常平凡存下来的搞笑:http://yesyouknow.sinaapp.com.(基情提示:不要把本屌的小网站搞瘫了)可是如许每次看到搞笑的都先要保存到本地,然后还要找时候打包上传,想想都烦的慌啊。
还好有强大的chrome,在简单的看了chrome开辟教程后(教程点我),本屌依葫芦画瓢做了一个扩大,可以一键上传到本屌的小网站。想试一试的基友们可以这个扩大:点我,打开后的文件只要直接将yesyouknow.crx文件拖拽到chrome浏览器窗口上就能安装了.最后在网页上右击便会弹出如下菜单:
看到那个”上传到yesyouknow”的菜单了嘛,点了过后就会上传到yesyouknow.sinaapp.com啦,刷新下网站就会看到方才上传的鸟.在yesyouknow网站上的可以直接引用,也可以到SAE的经管后台批量,如许是不是很便利了呢?
下面介绍实现办法,关于如安在SAE用python建站,可以直接去SAE首页以及SAE python手册查看,这里本屌就不罗嗦了.直接上代码.
SAE Python支撑web.py,所以开辟便利了不少.
1. 网站首页:index.py
这里很简单就是从storage存储中获取的链接列表,然后按时候排序每页显示4张.
# -- coding: utf-8 --
import sae
import web
import string
class Index:
def GET(self):
page_index=-1
user_data=web.input(page=0)
page_index=string.atoi(user_data.page)
st=sae.storage.Client()
st_list=st.list(yesyouknow2)
url_list=[]#只存放排序后的url,其它的都去掉
for d in st_list:
url_list.append(st.url(yesyouknow2,d[name]))
url_list.sort()
url_list.reverse()
html_pic=
part_list=[]
html_info=
if page_index>=len(st_list):
page_index-=4
html_info=<div align=center>~~~~~~~~~这是最后一页了~~~~~~~~~~</div>
elif page_index<0:
page_index=0
html_info=<div align=center>~~~~~~~~~~这是第一页~~~~~~~~~~~~~~</div>
if page_index+4>=len(url_list):
part_list=url_list[page_index:]
else:
part_list=url_list[page_index:page_index+4]
for puburl in part_list:
#print part_list
html_pic+=<div align=center><img src=%s/></div>%(puburl.encode(utf-8))
html_space=<p> </p>
html_page=r<div align=center><a href=?page=%s>上一页</a> <a href=?page=%s>下一页</a></div>%(str(page_index-4),str(page_index+4))
html_head=r<html><head><meta http-equiv=content-type content=text/html; charset=utf-8 /><title>嘿嘿</title></head><body>
html_end=r</body></html>
html_count=r<div align=center>当前共%s张</div>%(str(len(url_list)))
form=r
<div align=center>可以上传单个,也可以打包为zip文件批量上传.文件大小把握在7M以内
<form action=http://yesyouknow.sinaapp.com/upload method=post enctype=multipart/form-data>
<input type=file name=myfile />
<input type=submit />
</form>
</div>
html=html_head
html+=html_count
html+=form
html+=html_page
html+=html_space
html+=html_info
html+=html_pic
html+=html_space
html+=html_page
html+=html_end
return html
2.接管上传文件的代码:upload.py
这里处理惩罚在网站首页上传的,若是上传的是zip文件,就在内存中解压,然后将挨个放进storange中
# -- coding: utf-8 --
import sae.storage
import web
import zipfile
datetime import datetime
class Upload:
def POST(self):
web.header(Content-Type,text/html; charset=utf-8)
x=web.input(myfile={})
if myfile in x and x.myfile.filename!=:
self.file_upload(x)
web.seeother(/)
def file_upload(self,x):
filepath=x.myfile.filename.replace(\\,/)
filename=filepath.split(/)[-1]
filename=datetime.now().strftime(%Y%m%d%H%M%S%f)+.+filename.split(.)[-1]#将文件名批改为当前日期,便利后面排序
if .zip in filename:
self.unzip_upload(x.myfile.file)
else:
st=sae.storage.Client()
ob=sae.storage.Object(x.myfile.file.read())
sturl=st.put(yesyouknow2,filename,ob)
def unzip_upload(self,zip_file):
st=sae.storage.Client()
z=zipfile.ZipFile(zip_file)
namelist=z.namelist()
for name in namelist:
file=z.read(name)
filename=datetime.now().strftime(%Y%m%d%H%M%S%f)+.+name.split(.)[-1]#日期加上文件后缀名
ob=sae.storage.Object(file)
st.put(yesyouknow2,filename,ob)
3.接管chrome扩大发送过来的链接:back.py
#coding:utf-8
##接管chrome插件上传的链接,将存储到storage中.
import sae
import web
import urllib2
import sae.storage
datetime import datetime
class Back:
def GET(self):
web.header(Access-Control-Allow-Origin,)
user_data=web.input(src=no_exist)
img_src=user_data.src
img_data=urllib2.urlopen(img_src).read()
filename=datetime.now().strftime(%Y%m%d%H%M%S%f)+.+img_src.split(.)[-1]#将文件名批改为当前日期,便利后面排序
st=sae.storage.Client()
ob=sae.storage.Object(img_data)
st.put(yesyouknow2,filename,ob)
return ok,img_src
4.至于chrome扩大的话就更简单了,只用了一个函数用来发送当前的链接给yesyouknow网站.
chrome.contextMenus.create办法就是创建菜单了,点击菜单就会经由过程yesyouknowOnClick()来处理惩罚
//上传你喜好的到yesyouknow.sinaapp.com
function yesyouknowOnClick(info,tab){
console.log(hello yesyouknow);
console.log(info.srcUrl);
xmlhttp=new XMLHttpRequest();
url=http://yesyouknow.sinaapp.com/back?src=;
url+=info.srcUrl;
console.log(url)
xmlhttp.open(GET,url,false);
xmlhttp.send(null);
}
var title_yesyouknow=chrome.contextMenus.create({title: 上传到yesyouknow,contexts:[image],onclick:yesyouknowOnClick});
最后附上yesyouknow小站源码:点我
祝大师玩得高兴.
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
想必大师都知道sina推了一个叫Sina App Engine(SAE)的器材,就是仿照google的GAE啦.这个器材可以做免费的办事器用,SAE比来支撑了python,作为一个业余的python爱好者,天上掉下的馅饼岂有不吃之理?
本屌的业余爱好就是看微博,糗百上的搞笑段子,一碰着经典搞笑的就想保存下来留作日后慢慢观赏。所以呢,我就在SAE上用python搭了一个小网站,上传些日常平凡存下来的搞笑:http://yesyouknow.sinaapp.com.(基情提示:不要把本屌的小网站搞瘫了)可是如许每次看到搞笑的都先要保存到本地,然后还要找时候打包上传,想想都烦的慌啊。
还好有强大的chrome,在简单的看了chrome开辟教程后(教程点我),本屌依葫芦画瓢做了一个扩大,可以一键上传到本屌的小网站。想试一试的基友们可以这个扩大:点我,打开后的文件只要直接将yesyouknow.crx文件拖拽到chrome浏览器窗口上就能安装了.最后在网页上右击便会弹出如下菜单:
看到那个”上传到yesyouknow”的菜单了嘛,点了过后就会上传到yesyouknow.sinaapp.com啦,刷新下网站就会看到方才上传的鸟.在yesyouknow网站上的可以直接引用,也可以到SAE的经管后台批量,如许是不是很便利了呢?
下面介绍实现办法,关于如安在SAE用python建站,可以直接去SAE首页以及SAE python手册查看,这里本屌就不罗嗦了.直接上代码.
SAE Python支撑web.py,所以开辟便利了不少.
1. 网站首页:index.py
这里很简单就是从storage存储中获取的链接列表,然后按时候排序每页显示4张.
# -- coding: utf-8 --
import sae
import web
import string
class Index:
def GET(self):
page_index=-1
user_data=web.input(page=0)
page_index=string.atoi(user_data.page)
st=sae.storage.Client()
st_list=st.list(yesyouknow2)
url_list=[]#只存放排序后的url,其它的都去掉
for d in st_list:
url_list.append(st.url(yesyouknow2,d[name]))
url_list.sort()
url_list.reverse()
html_pic=
part_list=[]
html_info=
if page_index>=len(st_list):
page_index-=4
html_info=<div align=center>~~~~~~~~~这是最后一页了~~~~~~~~~~</div>
elif page_index<0:
page_index=0
html_info=<div align=center>~~~~~~~~~~这是第一页~~~~~~~~~~~~~~</div>
if page_index+4>=len(url_list):
part_list=url_list[page_index:]
else:
part_list=url_list[page_index:page_index+4]
for puburl in part_list:
#print part_list
html_pic+=<div align=center><img src=%s/></div>%(puburl.encode(utf-8))
html_space=<p> </p>
html_page=r<div align=center><a href=?page=%s>上一页</a> <a href=?page=%s>下一页</a></div>%(str(page_index-4),str(page_index+4))
html_head=r<html><head><meta http-equiv=content-type content=text/html; charset=utf-8 /><title>嘿嘿</title></head><body>
html_end=r</body></html>
html_count=r<div align=center>当前共%s张</div>%(str(len(url_list)))
form=r
<div align=center>可以上传单个,也可以打包为zip文件批量上传.文件大小把握在7M以内
<form action=http://yesyouknow.sinaapp.com/upload method=post enctype=multipart/form-data>
<input type=file name=myfile />
<input type=submit />
</form>
</div>
html=html_head
html+=html_count
html+=form
html+=html_page
html+=html_space
html+=html_info
html+=html_pic
html+=html_space
html+=html_page
html+=html_end
return html
2.接管上传文件的代码:upload.py
这里处理惩罚在网站首页上传的,若是上传的是zip文件,就在内存中解压,然后将挨个放进storange中
# -- coding: utf-8 --
import sae.storage
import web
import zipfile
datetime import datetime
class Upload:
def POST(self):
web.header(Content-Type,text/html; charset=utf-8)
x=web.input(myfile={})
if myfile in x and x.myfile.filename!=:
self.file_upload(x)
web.seeother(/)
def file_upload(self,x):
filepath=x.myfile.filename.replace(\\,/)
filename=filepath.split(/)[-1]
filename=datetime.now().strftime(%Y%m%d%H%M%S%f)+.+filename.split(.)[-1]#将文件名批改为当前日期,便利后面排序
if .zip in filename:
self.unzip_upload(x.myfile.file)
else:
st=sae.storage.Client()
ob=sae.storage.Object(x.myfile.file.read())
sturl=st.put(yesyouknow2,filename,ob)
def unzip_upload(self,zip_file):
st=sae.storage.Client()
z=zipfile.ZipFile(zip_file)
namelist=z.namelist()
for name in namelist:
file=z.read(name)
filename=datetime.now().strftime(%Y%m%d%H%M%S%f)+.+name.split(.)[-1]#日期加上文件后缀名
ob=sae.storage.Object(file)
st.put(yesyouknow2,filename,ob)
3.接管chrome扩大发送过来的链接:back.py
#coding:utf-8
##接管chrome插件上传的链接,将存储到storage中.
import sae
import web
import urllib2
import sae.storage
datetime import datetime
class Back:
def GET(self):
web.header(Access-Control-Allow-Origin,)
user_data=web.input(src=no_exist)
img_src=user_data.src
img_data=urllib2.urlopen(img_src).read()
filename=datetime.now().strftime(%Y%m%d%H%M%S%f)+.+img_src.split(.)[-1]#将文件名批改为当前日期,便利后面排序
st=sae.storage.Client()
ob=sae.storage.Object(img_data)
st.put(yesyouknow2,filename,ob)
return ok,img_src
4.至于chrome扩大的话就更简单了,只用了一个函数用来发送当前的链接给yesyouknow网站.
chrome.contextMenus.create办法就是创建菜单了,点击菜单就会经由过程yesyouknowOnClick()来处理惩罚
//上传你喜好的到yesyouknow.sinaapp.com
function yesyouknowOnClick(info,tab){
console.log(hello yesyouknow);
console.log(info.srcUrl);
xmlhttp=new XMLHttpRequest();
url=http://yesyouknow.sinaapp.com/back?src=;
url+=info.srcUrl;
console.log(url)
xmlhttp.open(GET,url,false);
xmlhttp.send(null);
}
var title_yesyouknow=chrome.contextMenus.create({title: 上传到yesyouknow,contexts:[image],onclick:yesyouknowOnClick});
最后附上yesyouknow小站源码:点我
祝大师玩得高兴.
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》