设为首页 收藏本站
查看: 1121|回复: 0

[经验分享] SAE python+chrome扩展快速存储喜欢的图片(可做图床)

[复制链接]

尚未签到

发表于 2015-4-19 07:24:40 | 显示全部楼层 |阅读模式
  想必大家都知道sina推了一个叫Sina App Engine(SAE)的东西,就是模仿google的GAE啦.这个东西可以做免费的服务器用,SAE最近支持了python,作为一个业余的python爱好者,天上掉下的馅饼岂有不吃之理?
  本屌的业余爱好就是看微博,糗百上的搞笑段子,一碰到经典搞笑的图片就想保存下来留作日后慢慢欣赏。所以呢,我就在SAE上用python搭了一个小网站,上传些平时存下来的搞笑图片:http://yesyouknow.sinaapp.com.(基情提醒:不要把本屌的小网站搞瘫了)可是这样每次看到搞笑图片的都先要保存到本地,然后还要找时间打包上传,想想都烦的慌啊。
  还好有强大的chrome,在简单的看了chrome开发教程后(教程点我),本屌依葫芦画瓢做了一个扩展,可以一键上传图片到本屌的小网站。想试一试的基友们可以下载这个扩展:点我,打开下载后的文件只要直接将yesyouknow.crx文件拖拽到chrome浏览器窗口上就能安装了.最后在网页图片上右击便会弹出如下菜单:
DSC0000.jpg
  看到那个”上传到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='~~~~~~~~~这是最后一页了~~~~~~~~~~'
elif page_index=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+=''%(puburl.encode('utf-8'))
html_space=" "
html_page=r'上一页   下一页'%(str(page_index-4),str(page_index+4))
html_head=r'嘿嘿'
html_end=r''
html_count=r'当前共%s张图片'%(str(len(url_list)))
form=r'''
可以上传单个图片,也可以打包为zip文件批量上传.文件大小控制在7M以内





'''
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
from 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扩展发送过来的图片链接:backupdate.py



#coding:utf-8
##接收chrome插件上传的图片链接,将图片下载存储到storage中.
import sae
import web
import urllib2
import sae.storage
from datetime import datetime
class Backupdate:
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/backupdate?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小站源码:点我
  祝大家玩得开心.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58526-1-1.html 上篇帖子: Python服务器开发二:Python网络基础 下篇帖子: Python学习系列(二)(基础知识)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表