发表于: 2021-12-30 23:13:24

0 869


今天完成的事:通过使用 python  图片从七牛云转移到金山云,并修改数据库中的 imgurl

import uuid
from ks3.connection import Connection
import pymysql

import requests
# 下载图片
def download_img(imgurl):
r=requests.get(imgurl)
print(r.status_code)
if r.status_code==200:
file_name=str(uuid.uuid1())
target_file='/opt/image/'+file_name+'.jpg'
       print(target_file)
open(target_file,'wb').write(r.content)

# 抓取网络资源上传到金山云
def upload_img(file_name,url):

c = Connection('AKLTolNOQShFQW6n9bRD_07usQ', 'OD5N2IV4s+efIcIBpIspuly+JW79U86DaQB4P/u0iYHhADL7kp86D7ap5C+yBf1i3A==', host='ks3-cn-guangzhou.ksyuncs.com')
# 获取存储空间实例。
   b = c.get_bucket('task7dataimg')
# 从第三方URL拉取文件,并上传至KS3某个 bucket 中存储成名为 object 的文件。
   b.fetch_object(file_name, source_url=url)

#更新 img
def update_img(id,imgurl):

db=pymysql.connect(host='127.0.0.1',
user='root',
password='deng796443',
database='tiles')
cursor = db.cursor()
sql="update tiles_user set img='%s' where tiles_user_id='%s'" % (imgurl,id)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()

# 打开数据连接
db=pymysql.connect(host='127.0.0.1',
user='root',
password='deng796443',
database='tiles')
cursor = db.cursor()
# sql 查询语句
sql='select tiles_user_id,img from tiles_user'
# 更新数据库


try:
# 执行 sql 语句
   cursor.execute(sql)
# 获取全部列表
   user_list=cursor.fetchall()

for user in user_list:
id=user[0]
img=user[1]
print('userId=%s,imgurl=%s'% (id,img))
# 生成图片名
       file_name=str(uuid.uuid1())+'.jpg'
       target_img='https://ks3-cn-guangzhou.ksyuncs.com/task7dataimg/'+file_name
print(target_img)
# 图片上传到金山云
       upload_img(file_name,img)

# 更新tiles 数据库 imgurl
       update_img(id,target_img)



except:
print('Error:unable to fetch data')

db.close()


任务 7 深度思考:怎么实现图片防盗链,缩略图,水印等功能? 

通常防盗链是为了防止图片,视频被盗用。

简单介绍几种防盗链的机制:

1. 利用HTTP Referer字段

 

   HTTP请求中会包含来自哪个url的点击来源,通过这个referer字段可以检测是否别的网站发送的请求。

 

2.利用登录验证信息

 

   有些需要登录的可以通过登录的信息来检车。

 

3.使用cookie中的动态验证信息

 

   由服务器端产生动态cookie,每次请求检车cookie的动态信息跟服务器端保存的动态信息进行比对监测。

 

4.使用POST请求

 

   post请求能够增加盗链的难度。

 

5. 使用图形验证码

 

  图片验证码很常用的一种技术。

 

6. 使用动态密钥

 

  为资源url动态加密生成新的url,密钥可以临时生成,根据url的id文件名等信息进行自己的加密算法加密,访问的时候再用同样的加密算法进行验证

 

7. 在内容中插入数据

 

  可以在内容中加入哈希校验,在url中加入动态hash值

明天的计划:在项目中添加防盗链技术


返回列表 返回列表
评论

    分享到