在富文本使用过程中发现有很多同事总是有tiff结尾的文件需要上传 也是图片的一种格式吧,这种格式的文件不支持在线预览的 如果是在网页中打开直接就会下载
解决方法就是需要把这个文件的类型需要转化一下,网络上很多什么imagic扩展来出来, 但是很麻烦 我觉得很麻烦,我试过 过段放弃了
第一步 我们需要 修改编辑器的图片上传的配置文件,这个需要根据你使用的编辑器类型 先把这个类型限制给加上tif和tiff格式的支持,不然还没有触发网络请求就会被提示上传失败
第二步 我们需要在富文本图片上传的接口判断是否是tiff文件我们单独处理
$houzhui = end(explode('.', $_FILES['file']['name'])); //获取后缀
in_array($houzhui,['tif','tiff']) //根据后缀判断是否单独处理
//上传文件到本地代码
上传成功返回完整的URL访问地址
第三步 我们需要用flask搭建一个能访问的web服务 获取图片上传七牛
import flask, json
import cv2
from qiniu import Auth, put_file, etag
import hashlib
import os
import requests
from flask import request
'''
flask: web框架
文件转化接口,需要传url、http://127.0.0.1:8882/uploadTiffImgs
'''
# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)
AK = ''
SK = ''
@server.route('/uploadTiffImgs', methods=['post'])
def uploadTiffImgs():
# 读取上传文件 存储到本地 这是一种方法 直接使用表单提交file
# file = flask.request.files.get('file')
# file.save("imgs/" + file.filename) # 保存文件 也可以写绝对路径 存入到你想存入的地方
# flask.request.get('file')
#换一种方法直接拉取图片
tif_path = request.values.get('file')
res = requests.get(tif_path)
# 获取文件名称
file_name = os.path.basename(tif_path)
# 发出请求返回结果
pic = res.content
#写入
photo = open(r'imgs/' + file_name, 'wb')
photo.write(pic)
photo.close()
# 获取本地图片tiff格式转化为png格式
files = cv2.imread("imgs/" + file_name, 1)
jpg_path_name = getMd5(file_name)
cv2.imwrite("img/" + jpg_path_name + ".png", files)
# 获取本地图片上传七牛返回文件名称
q = Auth(AK, SK)
# 要上传的空间
bucket_name = 'abc'
# 上传后保存的文件名
key = "report/" + jpg_path_name + ".png"
# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
# 要上传文件的本地路径
localfile = "img/" + jpg_path_name + ".png"
ret, info = put_file(token, key, localfile)
if (ret == None):
# 上传失败
return json.dumps({'msg': '上传失败!', 'code': 1, "errno": 2})
os.remove(localfile)
os.remove("imgs/" + file_name)
return json.dumps({'msg': key, 'code': 0, "errno": 0})
#本地的时候就不用try 方便看错
# try:
# 执行什么
#
# except:
# return json.dumps({'msg': '上传失败!', 'code': 1,"errno":3})
# else:
# 再执行什么
#获取一个MD5字符串 用作存储名称
def getMd5(str):
md5_value = hashlib.md5()
md5_value.update(str.encode("utf8"))
return md5_value.hexdigest()
if __name__ == '__main__':
server.run(debug=True, port=8882, host='0.0.0.0')
第四步 第二步后上传到本地就请求你的临时web服务 第三步中的 ,以上就是处理方法,这个方法很简单。展示了python对图片处理的强大的地方,以上的flask服务测试的时候可以用 不要用到正式环境中去,正式环境中可以使用uWSGI部署flask服务(反正我是用的这个)