终于,笔者的实习生活也要告一段落了,最后的几天都在忙着和公司做AIGC的项目,在搞api的设计以及公司门户网站的迁移。
牛马搬运工(牛马了3天)
先说这个门户网站的迁移,我原本以为只是换个后端(若依),数据库改改就能用,结果居然是换一个服务器,那就寄了,更寄的是,在转移新闻数据的时候,时间跨度大(20年初),结果就是新闻里面的图片采用的保存技术不同!
DataURIscheme
DataURIscheme是一种将小数据直接嵌入网页中的技术,减少HTTP请求,提高页面加载速度。(案例转载从https://blog.csdn.net/bbc2005/article/details/73369893)
例如你有一个图片,希望在前端展示,而他可能需要通过以下这种方式获取
这就是http URI scheme 。
<img src="http://sjolzy.cn/images/A.jpg"/>
而Data URI scheme是将http转为base64
以下这种方式就是Data URI scheme 。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" />
它把一些 8-bit 数据翻译成标准 ASCII 字符,虽然人看不懂了,但是
base64编码把图片文件增加了1/3,Data URI和MHTML同时使用相当于增加了2/3,但CSS和JavaScript可以使用gzip压缩,其可以节省2/3的数据量,所以使用gzip压缩后的最终数据量是(1 + 1/3) * 2 * (1/3) = 8/9,所以最终流量是减少的。还能减少请求数节约大量的时间。
而通过全选复制下的新闻内容包括了其中的富文本内容,也就导致复制的图片呈现的是base64的字符串,并且他不是一个图片文件,而是链接,一旦弃用原数据库图片就就地升天,这个问题的发现是在转移过程中出现了。
Error updating database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable. ### The error may exist in com/xuanyuan/portal/mapper/PortalInformationMapper.java (best guess) ### The error may involve com.xuanyuan.portal.mapper.PortalInformationMapper.insert-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO portal_information ( information_id, title, cover, content, status, type, sort, create_by, create_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? ) ### Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable. ; Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.; nested exception is com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.
后端数据库塞不进去了,数据太长了,query不足,虽然可以调整mysql策略解决,当问题是导入的图片仅仅是链接而不是本体。以下为同一种图片两种情况的存储,可以发现小图片base64塞满了数据且比原图片还大。
不转码保存但是网页协议落后
一般来说,网络协议落后也没有什么问题,但是http协议加载不出图片,需要改为https才能访问图片,不过很好的是出问题的这些不再是转base64保存,不用看哪些又臭又长的链接,但是原门户网站只能通过http访问,想要图片则必须将图片新开标签自己在前面加上https,只能说这实在是太折磨了而且不同后端存储的设置也不一样,转图片在改一样不方便。就这样这三天我感觉我都要得腱鞘炎了,我有没有工伤我不知道,但是我的鼠标倒是今创业未半而中道崩殂了。
利用flask搭建后端,设计功能开放api给AIGC使用
这个东西如果你们想尝试,可以去看看文擎毕昇或其他的AIGC平台,对应的就是工具这一块,我们需要实现的,就是设计了flask(python的一个框架)的各个路由分支,和他的功能实现就好了,下面是一个获取系统的运行时长的案例。(注意:理论上api的调用需要使用域名,理论上使用网络隧穿可能是一种无合法域名的实现方式之一,当然如果你是本地部署的,那直接localhost:端口也没问题)
python
1. from flask import Flask, jsonify
2. import time
3.
4. app = Flask(__name__)
5.
6. start_time = time.time()
7.
8. @app.route('/uptime', methods=['GET'])
9. def get_uptime():
10. uptime_seconds = time.time() - start_time
11. return jsonify({'uptime': uptime_seconds})
12.
13. if __name__ == '__main__':
14. app.run(debug=True)
这是与其对应的OpenAPI Schema。
python
1. {
2. "openapi": "3.1.0",
3. "info": {
4. "title": "Uptime API",
5. "description": "API to check the server uptime",
6. "version": "v1.0.0"
7. },
8. "servers": [
9. {
10. "url": "http://localhost:5000"
11. }
12. ],
13. "paths": {
14. "/uptime": {
15. "get": {
16. "summary": "Get Uptime",
17. "description": "Returns the uptime of the server in seconds.",
18. "operationId": "getUptime",
19. "responses": {
20. "200": {
21. "description": "Uptime in seconds",
22. "content": {
23. "application/json": {
24. "schema": {
25. "type": "object",
26. "properties": {
27. "uptime": {
28. "type": "number",
29. "description": "Uptime in seconds"
30. }
31. }
32. }
33. }
34. }
35. }
36. }
37. }
38. }
39. },
40. "components": {
41. "schemas": {}
42. }
43. }
44.
输入的OpenAPI Schema支持json和yaml两种常见格式,都需要满足openapi格式,什么,你不会写,这都ai时代了个,找大语言模型跑一下,或者拿AIGC试着做一个小助手都可以啊!为了保证api的实现唯一接口,需要为每一个操作提供opreationID,人工智能将会自动解析对应需求,在实际应用中将会自动设计数据包发送给后端。
说起网络隧穿,就想起了以前高中大学的时候搞这个,一个为了mc联机,一个为了去教室拿ipad玩电脑。现在呢,真的感慨时间流逝真快,变化之大,以前网络隧穿效果其实并不好(远程连接),而现在mumu出了一个gamevivewer能更好的远程控制,还能电脑多开桌面,手机控制后台的桌面,当然我用这个只是为了上课签到。。。。早八打开远程定位打卡。
这个隧穿也陪伴了我好久。
结语
整个实习我接触了很多新东西,不仅是技术上的,与人处事人际交往也是如此,很多时候纸上得来终觉浅绝知此事要躬行,也是一句真理,回过头才发现,不知不觉就实习了这么长的时间,也有些感慨,大四了,也快毕业了,那以后的人生,也差不多开始完全靠自己书写了。
估计高中那时的我们都没能想象到今天是怎么样的,没想过人工智能这么强大,没想过qq宠物也有一天会离我们远去,没想过高中电脑课学的VB到今天已经是半截入土的,没想过flash也会收费,未来到底是怎么样的呢,现在的我倒也有点感到伤感,感觉一天一天和时代脱轨,未来到底是怎么样的,希望是美好的吧,也希望每一年也能告诉自己,一年过去了,我也有了新变化,也有了成长吧。