ssh三层框架——上传文件(大小格式筛选+json返回相对地址)

PrettyZoo实战:5分钟搞定Zookeeper节点管理与SSH隧道配置(附避坑指南) 本文详细介绍了如何使用PrettyZoo这一基于JavaFX开发的高颜值可视化工具,快速完成Zookeeper节点管理与SSH隧道配置。通过跨平台安装指南、连接配置技巧、节点管理核心操作及生产环境最佳实践,帮助开发者提升Zookeeper运维效率,特别适合需要处理SSH隧道等复杂场景的团队。 阅读详情

上传文件

参考文章有三种上传方式http://wiki.jikexueyuan.com/project/ssh-noob-learning/upload-file.html

1:在struts中配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.il8n.encoding" value="UTF-8" />

    <constant name="struts.action.extension" value=","></constant>    
    <!-- 上传文件最大限制(如果为多文件上传,则为多个文件的总大小) -->    
    <constant name="struts.multipart.maxSize" value="40000000"></constant>    
    <!-- 存放上传文件的临时目录 -->    
    <constant name="struts.multipart.saveDir" value="D:\\temp"></constant>      

    <!-- 注意使用的包不是struts-default 而是json-default -->
    <package name="myPackage" namespace="/" extends="json-default">     
        <action name="upImgAction" class = "infoAction" method="upImg">
            <!-- param是参数,能够到action中 -->
            <param name="maximumSize ">1000000</param>  
            <!-- 这里写需要的格式待会儿会用到检验格式 -->  
            <param name="allowedTypes">image/png,image/jpg,image/jpeg,image/gif</param>     
        </action>
    </package>
</struts>

2:action

采用表单注入

//上传文件,采用表单形式,注入
private File upload;                  //上传文件
private String uploadFileName;        //上传文件名
private String uploadContentType;     //上传文件类型

private long maximumSize;  
private String allowedTypes;  

public File getUpload() {  
    return upload;  
}  
public void setUpload(File upload) {  
    this.upload = upload;  
}  
public String getUploadFileName() {  
    return uploadFileName;  
}  
public void setUploadFileName(String uploadFileName) {  
    this.uploadFileName = uploadFileName;  
}  

public String getUploadContentType() {  
    return uploadContentType;  
}  
public void setUploadContentType(String uploadContentType) {  
    this.uploadContentType = uploadContentType;  
}  
public long getMaximumSize() {  
    return maximumSize;  
}  
public void setMaximumSize(long maximumSize) {  
    this.maximumSize = maximumSize;  
}  
public String getAllowedTypes() {  
    return allowedTypes;  
}  
public void setAllowedTypes(String allowedTypes) {  
    this.allowedTypes = allowedTypes;  
}  

//上传头像
public String upImg() throws IOException {
        System.out.println("upImg...action...");

        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("application/json;charset=utf-8");
        response.setHeader("Access-Control-Allow-Origin", "*");
        PrintWriter outt = response.getWriter();

        JSONObject json = new JSONObject();
        try{
            //上传文件
            String flag = infoService.upFile(maximumSize,allowedTypes,upload,uploadFileName,uploadContentType);

            //地址为上传成功   0失败  -1太大  -2类型不符合
            json.put("msg", flag);

        } catch (Exception e) {
            System.out.println(e.toString());
            json.put("msg", "0");                    //失败
        } finally {
            outt.write(json.toString());
            outt.flush();
            outt.close();
        }

        return null;
    }
}

3:service中

//上传文件
public String upFile(long maximumSize, String allowedTypes, File upload, String uploadFileName,
        String uploadContentType) {
    System.out.println("upFile...service...");
    HttpSession session = ServletActionContext.getRequest().getSession();

    try{
        //新建文件
        File uploadFile = new File(ServletActionContext.getServletContext().getRealPath("upload"));
        if(!uploadFile.exists()) {  
            uploadFile.mkdir();  
        } 

        //验证文件大小
        if (maximumSize < upload.length()) {  
            return "-1";                        //文件过大

        } else {
            //验证文件格式
            boolean flag = false;  
            String[]  allowedTypesStr = allowedTypes.split(",");    //这是在配置文件中 按照逗号隔开

            for (int i = 0; i < allowedTypesStr.length; i++) {  
                if (uploadContentType.equals(allowedTypesStr[i])) {  
                    flag = true;                              
                }  
            }  

            if (flag == false) {  
                return "-2";                     //文件格式错误

            } else {
                //文件名为"uid_img"+uid+"后缀"
                String[] uploadFileNameArray = uploadFileName.split("\\.");
                uploadFileName = "uid_img" + session.getAttribute("uid") + "." + uploadFileNameArray[1];
                String path = uploadFile.getPath()+ "\\" + uploadFileName;

                //准备上传
                FileUtils.copyFile(upload, new File(path));  
                //删除临时文件  
                upload.delete(); 

                //相对路径
                String rePath = "upload" + "\\" + uploadFileName;
                //写入数据库
                boolean flag2 = infoDao.upImg((int)session.getAttribute("uid"), rePath);
                if(flag2 == false) {
                    return "0";                //失败
                } else { 
                    System.out.println(ServletActionContext.getServletContext().getContextPath());
                    return rePath;               //成功
                }

            }
        }
    } catch (Exception e) {
        System.out.println(e.toString());
        return "0";
    }

}

4:dao

//写入头像地址
@Override
public boolean upImg(int uid, String path) {
    System.out.println("upImg...dao...");

    try{
        User user = hibernateTemplate.get(User.class, uid);
        user.setPhoto(path);
        return true;
    }catch (Exception e) {
        System.out.println(e.toString());
        return false;
    }
}
宏景HCM系统uploadLogo.do接口任意文件上传漏洞深度剖析与防御实践 文件上传功能是Web应用中的常见模块,其安全实现依赖于严格的服务端校验机制。其核心原理在于,服务端需对上传文件的类型、内容、存储路径及访问权限进行多重验证,以防止恶意文件被上传并执行。在安全工程实践中,文件上传漏洞的防护具有极高的技术价值,一旦校验缺失,攻击者可能上传Webshell等恶意脚本,直接威胁服务器安全。此类漏洞常出现在人力资源管理系统、内容管理平台等涉及用户文件交互的应用场景中。本文聚焦于宏景HCM系统的`uploadLogo.do`接口,深入解析其因**服务端校验缺失**导致的**任意文件上传 阅读详情

相关推荐

FinalShell运维实战指南:SSH连接、SFTP与终端增强全解析

SSH客户端是Linux系统管理的基础工具,其核心价值在于稳定连接、高效命令执行与安全文件传输。FinalShell作为国产跨平台SSH工具,基于Electron架构实现Windows/macOS/Linux及国产OS(统信UOS、麒麟)一致体验,通过持久化会话状态机、libssh2深度集成的SFTP协议栈、终端输出结构化解析等技术设计,显著提升多环境协同效率与故障响应速度。它面向一线运维工程师,解决高频场景如批量主机管理、断线续传、日志实时分析、配置同步等实际痛点,尤其适配政企国产化环境下的SSH连接稳定

weixin_33835103的博客 431

ssh文件上传注意问题

版权声明:本文为优快云博主「无主之城gas」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/weixin_39981912/article/details/81196158 第一步:在前台(jap)中写 1.第一就是:方法改成post 2.第二就是:enctype=“mu...

Li_Hui_的博客 618

Windows环境下MongoDB安装与Navicat导入JSON数据实战指南

文档数据库是处理半结构化数据(如JSON)的核心技术,其核心原理在于采用类JSON的BSON格式存储数据,无需预定义严格模式,天然支持嵌套文档和数组。这种灵活的数据模型为快速迭代开发和异构数据整合提供了巨大价值,尤其适用于内容管理、日志分析、物联网和实时数据处理等场景。在工程实践中,通过图形化管理工具(如Navicat)进行数据导入与可视化操作,能显著提升开发效率。本文以Windows平台为例,详细解析如何部署MongoDB服务并利用Navicat高效导入JSON文件,涵盖**服务配置**、**连接管理**

weixin_30345577的博客 492

ssh框架中怎么修改上传文件的大小

我们之前在学习struts2的上传文件案例时,可以通过修改sturts2核心包中的default.properties文件中的常量可以修改上传文件大小的限制,如下图所示: 我们是在sturts.xml文件中定义该常量,然后修改它的value值,但是我们在ssh框架整合后,struts.xml文件已经被spring整合不存在了,那么我们怎么修改上传文件的大小呢; 其实我们只要手动创建一个st...

caiyibing1992的博客 1482

从GitHub日榜到本地落地:看懂趋势、筛选项目与合规加速下载

GitHub 日榜(Trending)是开发者发现热门开源项目的重要入口,其排序基于短时间内的 star 增量,反映的是短期动能而非项目的长期质量。理解这一原理后,开发者可以借助官方参数与搜索 API 定制自己的浏览方式,并通过 License、提交记录、测试覆盖等维度快速评估项目价值。实际落地时,常会遇到 github打不开、github下载加速等网络痛点,其实可通过 SSH 协议、浅克隆、release 下载、国内代码托管平台及官方 CDN 等合规方式解决,避免使用来路不明的“镜像”带来的安全风险。围绕

weixin_34080951的博客 509

HelloGitHub第122期:可运行优先的开源项目筛选方法论

开源工具选型本质上是工程可靠性决策,其核心在于可运行性验证、维护活性判断与场景穿透力评估。不同于追逐Star数或AI热词的资讯类推荐,《HelloGitHub》建立了一套基于真实终端执行、跨平台验证、90天活跃度追踪和一线协作痛点映射的三审一验机制。它聚焦CLI工具链、Web支撑层、嵌入式数据层等高频刚需领域,强调零依赖、单二进制、5分钟可验证等开发者友好特性。这种‘小而美’的生产力补丁思维,正成为工程师规避玩具项目陷阱、加速生产环境落地的关键技术雷达。

weixin_30423977的博客 402

ssh框架中对文件的上传

. 添加文件上传的选择项 1. 客户端三个注意事项 * method="post" * enctype="multipart/form-data" * 2. Struts2框架的使用拦截器完成了文件上传,并且底层使用也是FileUpload开源的组件。 * 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 

2529

数据迁移与清洗实战:如何用MongoDB Compass的导入/聚合功能处理CSV和JSON文件

本文详细解析了如何使用MongoDB Compass这一可视化工具进行数据迁移与清洗,涵盖从CSV/JSON文件导入到数据转换、缺失值处理的全流程。通过实战案例展示如何利用聚合管道构建器完成复杂数据处理,并分享性能优化与自动化实践技巧,帮助用户高效完成ETL工作。

weixin_30335353的博客 455

实现struts2文件上传的类型限定以及文件大小控制

上次只是简单的实现了文件的上传功能,并没有实现上传文件的类型和大小的控制。这次主要是实现这两种功能。 1,在文件上传实现类UploadFile.java中添加file.html' target='_blank'>文件类型的属性如下: private String uploadContentType; public String getUploadContentType() {

Alinaxz的专栏 2067

VSCode插件筛选与优化指南:从性能成本到远程开发避坑

现代代码编辑器通过扩展生态实现个性化开发环境,但插件数量的增长往往会带来启动缓慢、内存占用过高等性能问题。VSCode 本身内置了智能感知、Git 操作等基础功能,插件的真正价值在于弥补编辑器未覆盖的特定场景,因此需要从真实痛点出发反向选择,而非盲目安装。在安装前评估插件维护状态与兼容性,可有效避免环境冲突。日常开发中,代码补全、格式化、Git 增强和远程连接类插件(如 Pylance、Prettier、GitLens、Remote-SSH)能显著提升效率,但语言服务器类插件会持续占用资源,需按需启用。掌握

weixin_28828243的博客 350

Java教学资源管理系统:Spring Boot+MyBatis-Plus权限设计与文件上传下载实践

在Java后端开发中,权限控制与资源管理是两类高频需求。RBAC模型通过用户-角色-权限三层拆分,避免了散落的身份判断;结合Spring Boot与MyBatis-Plus,可以快速搭建稳定的文件上传、下载与检索接口。这类技术方案不仅适用于教学资源管理系统,也能迁移到文档库、内容平台等场景。文章从系统设计、数据表结构到拦截器鉴权与部署避坑,提供一套完整的工程落地路径,适合课程设计及内部系统开发者参考。

weixin_34306593的博客 449

SSH-facts深度教程:一键获取远程服务器系统信息的完整指南

ssh-tools是一款让SSH使用更便捷的工具集,其中ssh-facts工具能够帮助用户快速获取远程服务器的系统信息,无需复杂操作,只需一条命令就能轻松掌握服务器状态。 ## 为什么选择ssh-facts? 在日常服务器管理中,了解服务器的基本信息是非常重要的。传统方法需要登录服务器后执行多个命令才能收集到所需信息,而ssh-facts工具则简化了这一过程,让你无需登录就能获取关键系统信息,

gitblog_01180的博客 1101

ssh文件上传、超大附件上传

演示了包括:权限控制、超大附件文件上传、EasyUI基本组件使用等等功能,具体请自行看本示例演示功能 SSH框架环境需求:JAVA环境:JDK7+;数据库环境:oracle10g+/sqlserver2000+/mysql5+;WEB容器环境:jetty6+/tomcat6+;编译环境:maven:3.x+

Tss主机选择器:轻松管理多Tailscale节点的SSH远程维护利器

随着Tailscale网络中节点数量增长,依赖 tailscale status 逐一查找目标主机的效率急剧下降,这也让“如何快速定位节点并执行操作”成为远程维护中的高频痛点。本质上,主机选择器是一类交互式命令行工具,它通过读取 tailscale status --json 的结构化数据,将节点信息转化为可筛选、可选择的候选列表,再通过指令触发 SSH、ping 或复制IP等动作。这类工具的价值在于把“查看、过滤、选择、执行”压缩成一次操作,尤其适合多环境、多集群场景下工程师日常排查线上机器、切换测试机的

dengjuanshou7445的博客 463

ssh框架实现多文件上传

主要介绍了SpringMVC 文件上传配置,详解介绍了如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤,有兴趣的可以了解一下

骁龙X Elite笔记本重装Windows 11 Arm64系统完整指南与避坑手册

UEFI安全启动和Arm64架构是理解现代计算设备系统部署的基础。UEFI取代传统BIOS,提供了更安全的启动环境和模块化固件接口,而Arm64架构则以其高能效特性,在移动和新兴PC领域日益重要。其技术价值在于为设备带来更快的启动速度、更强的安全防护以及更优的功耗表现。在应用场景上,这直接关系到搭载高通骁龙X Elite等Arm处理器的笔记本电脑的系统安装与维护。对于这类设备,重装系统远非插入通用安装盘那么简单,核心挑战在于必须使用专为Arm64编译的Windows镜像,并需提前集成芯片组、网络等硬件的专属

weixin_33428613的博客 476

3.VSCODE使用方法记录

如果你不希望将插件安装在系统盘的C盘,你可以创建一个新的文件夹来专门存放插件。然后通过修改快捷方式的“目标”属性,指定该新文件夹作为插件的安装目录。例如,如果要在D盘安装插件,可以将目标设置为:``````之后需要重启Visual Studio Code以便应用新的设置。先Ctrl + K再Ctrl + T自定义背景。

知识共享、互助共进 704

QT使用openssl实现RSA加解密

使用openssl生成公私钥,随后用QT对相应的信息进行RSA加解密

weixin_42098322的博客 3867

FFUF输出模块深度解析:从JSON到自动化工作流的高效结果管理

在Web安全测试与渗透测试领域,模糊测试是发现隐藏目录、文件和API端点的关键技术手段。其核心原理是通过自动化工具向目标应用发送大量精心构造的请求,并根据响应差异识别潜在的攻击面。这项技术的价值在于能够系统性地扩大测试覆盖范围,发现常规扫描可能遗漏的敏感信息泄露点或未授权访问路径。在实际的渗透测试、红队演练和持续安全监控等应用场景中,高效地管理和分析海量模糊测试结果,是提升安全工程师工作效率的关键。本文聚焦于业界广泛使用的高性能Web模糊测试工具FFUF,深入探讨其强大的输出模块,涵盖JSON、CSV、HT

java天气 349

hcaptcha逆向实战:从API解析到参数构造的完整链路

本文详细拆解了hcaptcha验证码的逆向实战流程,从环境准备、捕获API与版本号,到解析核心加密逻辑hsw.js,再到构造getcaptcha请求参数,最后完成验证提交。文章重点剖析了motionData、n、c等关键参数的获取与构造方法,为开发者模拟浏览器行为、实现自动化验证提供了清晰的完整链路指南。

ik678901的博客 629

从零到一:ESP32-P4 PPA加速的配置陷阱与避坑指南

本文详细解析ESP32-P4结合LVGL的PPA硬件加速配置中的常见陷阱,包括内存对齐、缓冲区设置和同步机制等关键问题。提供实用的避坑指南和优化方案,帮助开发者高效启用esp32p4的PPA加速功能,显著提升图形渲染性能。

sky77的博客 396

扩展已连接但服务起不来:用 mcp-chrome-bridge doctor 三步修好 Chrome MCP Server

Chrome MCP Server 最高频的故障就一种:扩展显示已连接,MCP 服务却始终起不来,AI 侧调用全部失败。故障排查的主线只有三步——跑 `mcp-chrome-bridge doctor` 自检,用 `doctor --fix` 或 `register` 修复,再用 `report` 导出诊断报告留证。下面按故障现象的顺序展开。 先交代清楚链路:Chrome 通过 Native M

gitblog_00588的博客 96

基于STFT和卷积神经网络的时序数据分类

我们提供了相应的代码和数据,读者可以直接运行并尝试在自己的数据集上进行分类实验。在本文中,我们将介绍一种基于短时傅里叶变换(STFT)和卷积神经网络(CNN)的时序数据分类方法。我们将提供可直接运行的代码和数据,以帮助读者理解和实现这一方法。STFT可以提取信号的频谱信息,有助于捕捉时序数据中的关键特征。在这个例子中,我们将使用一个简化的手势识别数据集作为示例。在这段代码中,我们使用Adam优化器和稀疏分类交叉熵损失函数进行模型的编译。然后,我们使用训练集进行模型的训练,同时使用测试集进行模型性能的验证。

CodeWOW的博客 694
上一篇: HDU 6024 Building Shops(DP)
下一篇: 贪心例题集
WaveBridge
博客等级 码龄10年 8粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值