cgicc开发(文件上传)

//cgicc文件上传封装
void UploadSoftware()
{// 初始化CGIC环境Cgicc cgi;// 获取上传的文件file_iterator fileIter = cgi.getFile("button_browse"); //from表单中,输入为文件属性(type=file)的name属性值if (fileIter == cgi.getFiles().end()){
#if (DEBUG == true)cout << "file: " << cgi.getFiles().size() << endl;
#endif}else{FormFile& file = *fileIter;
#if (DEBUG == true)std::cout << "<p>file: " << std::endl;std::cout << "<br>    name: "<< file.getName() << std::endl;std::cout << "<br>    filename: "<< file.getFilename() << std::endl;std::cout << "<br>    type: "<< file.getDataType() << "; cgicc::HTTPHTMLHeader=" << cgicc::HTTPHTMLHeader() << std::endl;std::cout << "<br>    size: "<< file.getDataLength() << std::endl;std::cout << "<br>    content: "<< file.getData() << std::endl;
#endif// 保存文件到服务器指定路径ofstream outfile("/opt/software/" + file.getFilename(), ios::out | ios::binary);outfile << file.getData();outfile.close();}
}
<!--html from表单部分-->
<script>
function SubmitUpgrade(obj)
{if(document.getElementById("button_browse").value == "" && document.getElementById("software_bag_url").value == ""){alert("软件升级包未选中");return false;}var ip_pos = radio_json.base.localHost.split('.');var first_ip_pos = Number(ip_pos[3]) + 100;var second_ip_pos = Number(ip_pos[3]) + 200;var first_ip = ip_pos[0] + "." + ip_pos[1] + "." + ip_pos[2] + "." + first_ip_pos;var second_ip = ip_pos[0] + "." + ip_pos[1] + "." + ip_pos[2] + "." + second_ip_pos;console.log("first_ip=" + first_ip + "; second_ip=" + second_ip + "; third=" + radio_json.base.localHost);obj.action="/cgi-bin/uphold_tools/uphold_tools.cgi?upgrade_software&1&" + first_ip + "&" + second_ip + "&" + radio_json.base.localHost + "&client&1";obj.submit();
}
</script>
<form enctype="multipart/form-data" id="form_upgrade" name="form_upgrade" method="post"><td class="css12r">软件升级包:</td><td><input name="software_bag_url" type="text" id="software_bag_url" size="22" maxlength="22" /></td><td><p class="css12l"><input type="file" name="button_browse" id="button_browse" /></p></td><td><p class="css12l"><input type="submit" name="button_upgrade" id="button_upgrade" value="升级" onclick="return SubmitUpgrade(this.form)"/></p></td>
</form>

测例:

 

 注意:

1)上传不同类型的文件需要设置不同的 HTTP Content Header。在文件上传时,Content Header 包含了关于上传内容的类型和其他重要信息,这对于服务器正确解析和处理上传的文件至关重要。一般,cgi程序在main函数开始的位置需要指明Content Header:

cout << "Content-type:text/html;charset=utf-8\r\n\r\n";

当上传.tar.gz类型的压缩包文件时,Content-type:text/html;已不再满足,需要设置tar.gz的Content Header:

HTTPContentHeader("application/x-tar-gz");

2)上传的文件有大小限制。

        一般在web server的配置文件中有指定单次POST的数据流大小,若不指明,默认1M。例如:boa web server的boa.conf中修改上限为20M:20*1024*1024 = 20M = 20971520

# SinglePostLimit: The maximum allowable number of bytes in 
# a single POST.  Default is normally 1MB.SinglePostLimit 20971520

上传文件超过单次请求数据流上限时,报错: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件设计师中级 重点 笔记

文章目录 下午题目网络DNS域名解析分类&#xff1a;域名协议简介网络设备 算法软件工程实体联系图&#xff08;E-R图&#xff09; 其它 下午题目 数据流图补充原则 22年下半年真题 更早-真题大全 答题技巧 网络 DNS域名解析分类&#xff1a; 递归查询的顺序&#xff1a;1.本…

电脑重要文件如何加密保护?教你两种方法

加密是保护电脑重要文件的常见方法&#xff0c;可以有效避免文件数据泄露。那么&#xff0c;电脑重要文件该如何加密保护呢&#xff1f;下面小编就来教你两种方法&#xff0c;帮助你解决文件安全问题。 超级加密3000 超级加密3000是一款专业的电脑数据加密软件&#xff0c;可以…

流量被劫持?不怕,轻松Get 防“窃”技巧!

流量劫持是一种恶意行为&#xff0c;攻击者会在用户访问网站时&#xff0c;将其流量重定向到第三方站点上&#xff0c;导致用户访问的不是原始目标站点。这种行为不仅会影响网站的品牌形象&#xff0c;还会导致用户流失和信息泄露等严重后果。本文将探讨网站如何应对流量劫持。…

SurfaceFinger layer创建过程

SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候&#xff0c;SurfaceFlinger是如何构建对应的Layer的主要工作有那些&#xff01; 这里参考的Android源码是Android 13 aosp&#xff01; app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…

window.location.search取不到值

window.location.search window.location.search没有值的原因&#xff1a; URL中使用了 hash &#xff08;指URL中带有#符号&#xff09;,导致URL后面携带的参数被location.hash截取走了&#xff0c;你再使用window.location.search得到的就是空值 打印 window.location 其实…

收银系统源码--零售连锁店铺如何选择适合自己的收银系统?

如果你现在还认为小便利店只要简单的收款&#xff0c;只有大型的连锁便利店才需要收银软件和管理软件&#xff0c;那你就错了&#xff0c;连锁品牌的便利店是必须要用到专业的收银软件&#xff0c;但是小微型的便利店更应该要用专门的软件&#xff0c; 在各行各业逐步革新互联网…

ORCLE删除数据库文件

在实际操作中很少会去删除数据库文件&#xff0c;但是凡事都有例外&#xff0c;由于一些特殊原因&#xff0c;例如存储方式变化、磁盘空间不够等&#xff0c;需要调整和删除一些无效的数据库文件&#xff0c;本文介绍一下实践出来的一种删除数据库文件的操作方式。 删除前请对数…

Linux系统之touch命令的基本使用

Linux系统之touch命令的基本使用 一、touch命令介绍1. touch命令简介2. touch命令作用 二、touch命令帮助1. touch命令的帮助信息2. touch命令的选项解释 三、touch命令的基本使用1. 查看touch工具版本2. 创建空文件3.查看空文件属性4. 修改文件时间戳5. 文件不存在时不创建 四…

概率分布函数与误差函数的关系

正态函数&#xff08;高斯分布&#xff09; 对其求[b,x]区间的积分 标准误差函数 以下两个方程相等&#xff08;a,b取值任意&#xff09; 两个函数重合 可知正态函数 f(t) 在[b,x]的区间上积分等于 引用desmos计算器&#xff1a;Desmos | Lets learn together.

5.命令行提示符

一、打开终端&#xff08;有以下几种方式&#xff09; 1.在搜索框输入 terminal 2.命令 &#xff08;1&#xff09;ctrlaltt打开新的终端 &#xff08;2&#xff09;ctrlshiftt&#xff1a;在已经打开终端的基础内&#xff0c;新打开一个同路径的终端。 &#xff08;3&#xf…

一文读懂什么是PaaS平台

如今&#xff0c;数字化概念广为流传&#xff0c;数字化转型的重要性也不言而喻。在转型过程中&#xff0c;企业不仅需要高效地管理业务流程&#xff0c;还需要不断创新和适应市场变化。在这样的背景下&#xff0c;PaaS平台应运而生&#xff0c;成为了企业实现创新、提升效率的…

充电宝哪家好用推荐?买什么充电宝性价比高?2024年充电宝排行榜

说实话&#xff0c;我其实是个手机重度使用者&#xff0c;买过的充电宝也有无数款了&#xff0c;每次手机没电的时候插座都离得不是特别近&#xff0c;不是要下床充电就是要固定在一个位置充电感觉怪麻烦的&#xff0c;但是有了充电宝后可以在床上玩手机都不用担心手机没电&…

1131. 绝对值表达式的最大值

1131. 绝对值表达式的最大值 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_1131绝对值表达式的最大值 错误经验吸取 原题链接&#xff1a; 1131. 绝对值表达式的最大值 https://leetcode.cn/problems/maximum-of-absolute-value-expr…

机会就在眼前!2025-CISP深圳国际体育展的招展工作火热持续中...

2025-CISP中国&#xff08;深圳&#xff09;国际体育展的招展工作火热持续中&#xff0c;凭借越来越深远的影响力以及前两届的成功举办经验&#xff0c;展位多半已被“抢购”。但小编的同事们同时又反映出一个问题&#xff1a;有一批老展商和新展商已有明确的参展意向&#xff…

第十三周 5.27面向对象的三大特性(封装、继承、多态)(三)

3.instanceof避免类型转换异常: (1)语法:引用名 instanceof 类名 (2)执行:判断引用中存储的实际对象类型是否兼容于后面的类型(是否为后面类型的一种)&#xff0c;兼容一true&#xff0c;不兼容—false (3)作用:可以在程序设计中避免类型转换异常 直接使用案例…

C# 中 async 与 await 关键字详解

async 和 await 关键字的作用是使方法能够异步执行并等待异步操作的完成。&#xff08;最重要的一点是记住 “异步执行”与“等待异步操作完成”&#xff0c;不是等待主线程操作完成&#xff09; async 修饰符可将 方法、lambda 表达式或匿名方法指定为异步。 async 关键字用于…

TS(TypeScript)中Array数组无法调出使用includes方法,显示红色警告

解决方法 打开tsconfig.json文件&#xff0c;添加"lib": ["es7", "dom"]即可。 如下图所示。

如何使用Spring Cache优化后端接口?

Spring Cache是Spring框架提供的一种缓存抽象,它可以很方便地集成到应用程序中,用于提高接口的性能和响应速度。使用Spring Cache可以避免重复执行耗时的方法,并且还可以提供一个统一的缓存管理机制,简化缓存的配置和管理。 本文将详细介绍如何使用Spring Cache来优化接口,…

nginx开启资源目录

nginx开启资源目录表 可访问开放资源目录下的任何文件以及视频&#xff0c;图片等。可以作为一个妥妥的线上网盘资源托管空间使用。 上一篇文档揭示了nginx的神秘面纱&#xff0c;初步介绍与启动了nginx的基本功能和使用前端nginx学习配置开发验证&#xff0c;对各种配置已经…

rm命令处理(防止误删)

文章目录 前言&#xff1a;一、添加回收站脚本二、测试1.rm命令测试2.清理回收站 三、自动建立回收站脚本总结 前言&#xff1a; 前几天本来想对开发板上的内容进行一个转移&#xff0c;一边心想这直接mv -rf * dir不就行了嘛&#xff0c;一边打上了rm -rf * dir。。。然后。。…