博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于B/S模式CGI上传文件,遇到的问题归纳(待更新。。。)
阅读量:4960 次
发布时间:2019-06-12

本文共 1345 字,大约阅读时间需要 4 分钟。

    由于项目问题是基于web的,最近一直在改进web界面,由于产品需要升级,而且升级操作是由客户在web端完成,将软件包放在本地,由web上传到后台完成更新,之前做的是TFTP更新方式,但是需要借助第三方软件,TFTP服务器,最近在网页优化的过程中感觉太麻烦,于是改成在web直接上传的方式,不借助于第三方软件。效果图:

1、文件传输:post方式,不编码,用到HTML的file属性,代码:

(1)框架部分:

 

(2)JS部分:

 

此函数包括TFTP更新和WEB更新两种方式,代码截图有点重复。。。

(3)JS文件属性函数:

(4)JS完成上传:

其中四个监听函数从上到下分别为:进度条、上传完成、上传失败和取消上传;

(5)回调函数如下:

进度条:

(6)CGI接收:

 

回调函数:

3、如果只是单个文件上传(非压缩包方式),这样目的就达到了,但是当打开server1的时候会注意到比源文件多了五行:

 

即第一行至第四行(空行),还有最后一行,我单独写了一个脚本去掉这多余的五行:

解释:第一行的意义是去掉前四行,第二行是去掉最后一行;

这样目的虽然达到了,然而在传输大文件时出现了问题,提示:

同时网页也会提示:

错误信息是文件大小已经超出了boa默认接收数据的长度,(按理说当已GET方式发送数据时才会有数据大小的限制,POST没有,具体情况还有待查证!!!也希望知道的朋友告知,谢谢!!!)

于是,我找到boa源码,打开src/defines.h,更改如下:(boa默认数据大小为1M)

然后重新make,重启boa服务器!

4、压缩包问题已经得到解决,在此感谢艳姐的提示!

压缩包其实就是个文件,因此和单个文件传输原理是一样的,而且代码也很类似,如果是单个文件,保存到后台,通过CGI将其内容读取再写到另一个文件就好了,压缩包只不过是把保存的文件格式变了而已,经验证http协议头中支持的压缩格式有两种:.zip压缩包和.rar压缩包,而这两种压缩包在http协议的MIME头部分别为Content-Type:application/x-zip-compressed和Content-Type: application/octet-stream。

zip压缩包在Linux下的压缩和解压缩命令分别为:zip和unzip;(zip all.zip *.jpg和unzip all.zip)

rar压缩包在Linux下的压缩和解压缩命令分别为:rar a all.rar *.jpg; unrar e all.rar

(在进行调用rar压缩包的相关命令时首先安装rar和unrar:sudo apt-get install rar和sudo apt-get install unrar)

代码截图如下:

http协议的MIME头部好像还有这种格式: Content-Type:application/x-gzip代表支持gzip格式的压缩包,但是由于360压缩包压缩不成该格式的,没进行测试,在网上查的得知,Linux好像有命令执行成功,等待测试成功了再继续更新!!!

  

转载于:https://www.cnblogs.com/ys6738-4271-3931/p/5349929.html

你可能感兴趣的文章
[svc][op]杀进程
查看>>
linux安装jdk
查看>>
求1+2+3+...+n
查看>>
[EXP]Microsoft Windows CONTACT - Remote Code Execution
查看>>
【面试】MySQL 中NULL和空值的区别?
查看>>
用js判断 iPhone6 iPhone6 plus iphonex?
查看>>
NOIp2016 蚯蚓 【二叉堆/答案单调性】By cellur925
查看>>
NOIp知识集合 By cellur925
查看>>
Nginx设置日志分割方法
查看>>
教学目标的表述方式──行为目标的ABCD表述法
查看>>
交换两个变量的值的若干种方法
查看>>
CKEditor 配置
查看>>
闪烁的文字
查看>>
IOS开发-点击View取消键盘输入
查看>>
标准库 string
查看>>
C++内联函数
查看>>
LNMP 1.1 php编译安装
查看>>
jw player参数设定(转)
查看>>
mysql 不常用备忘
查看>>
Mybatis自动化生成代码
查看>>