传统form表单提交方式的文件上传与文件存储

引言

时隔一天,上一篇文章《文件存储》刚一停笔,今天上午就解决了困扰我已久的文件上传问题。

站在一个已实现功能的角度来重新看待这个文件上传的业务:编辑页面选择jar包,然后通过form表单提交,上传到后台程序,然后保存。

对于后端实现的更多细节,可以参考我的另一篇技术分享《Java实现用户头像上传》,里面较为详细的分析了文件从浏览器传输到服务器之后的一些处理规则,包括接收方式、磁盘存储等。

文件上传的入口

最简单的浏览器上传入口仅需要一个form标签:

<form action="http://localhost:8081/thingsparse/addorupdthingsparse" method="post" enctype="multipart/form-data"><input type="file" name="file" value="选择jar包"/><input id="submit_form" type="submit" class="btn btn-success save" value="保存"/>
</form>

前端只是用了传统的form表单上传文件的方式,提交按钮直接submit到后台,而不需要多写哪怕一丁点的额外js。

值得注意的是:每条form表单参数都需要有name属性,以及form表单的enctype="multipart/form-data"

文件的存储

其实关键的代码就是文件的接收,至于后面的存储操作,基本上都是对IO流的操作。浏览《Java实现用户头像上传》参考更多信息。

/*** 解析新建编辑* * @param String*            newThingsParse是一个拥有ThingsParse类结构的json字符串* @return*/@RequestMapping(value = "/addorupdthingsparse")public ModelAndView saveThingsParse(MultipartFile file, HttpServletRequest request) {String idStr = request.getParameter("thingsparse_id");ThingsParse thingParse = new ThingsParse();//将被存储于mongodb的实例String filePath = "";// jar包的路径if (!file.isEmpty()) {File temp = new File("");filePath = temp.getAbsolutePath() + "\\" + file.getOriginalFilename();BufferedOutputStream out;try {out = new BufferedOutputStream(new FileOutputStream(new File(filePath)));out.write(file.getBytes());out.flush();out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}}logger.info("保存的jar包路径是:" + filePath);//output:保存的jar包路径是:D:\workspace\wxgz\json.jarthingParse.setJarPackage(filePath);thingParse.setAuthor(request.getParameter("author"));thingParse.setDirection(request.getParameter("direction"));thingParse.setEntranceClass(request.getParameter("entrance_class"));thingParse.setEntranceMethod(request.getParameter("entrance_method"));thingParse.setName(request.getParameter("thingsparse_name"));thingParse.setTestData(request.getParameter("test_data"));thingParse.setVersion(request.getParameter("version"));if (idStr == null || "".equals(idStr)) {// 新增// 获取当前系统时间Calendar now = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String nowStr = sdf.format(now.getTime());// 将物解析实例的创建时间赋值thingParse.setCreateTime(nowStr);// 存储thingsParseRepository.save(thingParse);} else {// 编辑thingParse.set_id(new ObjectId(idStr));if(file.isEmpty()){thingParse.setJarPackage(request.getParameter("jar_package"));}thingParse.setCreateTime(request.getParameter("thingsparse_createtime"));thingsParseRepository.save(thingParse);}String listUrl = "redirect:http://localhost:8081/thingsparse/thingsparselist";return new ModelAndView(listUrl);//后台重定向}

总结

web应用的文件上传是一个相对通用的功能,使用最简单的form表单提交基本可以满足多数应用的要求。

关键的思路就是前端的form表单选择文件然后提交,后端使用类型MultipartFile 接收。而文件保存到本地磁盘可以参考《文件存储》和《Java实现用户头像上传》。

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

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

相关文章

eclipse项目一直显示有错,但是一直找不到错误在哪里

eclipse项目一直显示有错&#xff0c;但是一直找不到错误在哪里 这天在写项目的时候碰到了这么个问题&#xff0c;项目上一直提示着红叉&#xff0c;但不管是文件里还是java buildpath里都找不到报错&#xff0c;很纳闷了~最后终于给我找到方法了~如下&#xff1a; 类似于下面这…

微型计算机硬件性能取决于什么,微型计算机硬件系统的性能主要取决于

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。微型计算机硬件系统的性能主要取决于微处理器。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯…

LeetCode(#1)————Two Sum

问题描述 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复利用这个数组中同样的元素。 Given nums [2, 7, 11, 15…

Log4j文件配置教程大全

Log4j文件配置教程大全~Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的&#xff0c;它可接keyvalue格式的设置或xml格式的设置信息。通过配置&#xff0c;可以创建出Log4J的运行环境。1&#xff0c; 整体框架介绍&#xff1a;#配置根Logger log…

微型计算机和接口技术考题,微型计算机接口技术以及应用考题

一、单项选择题1&#xff0e;通常在外设接口中&#xff0c;往往有( )端口才能满足和协调外设工作要求。A&#xff0e;数据 B&#xff0e;数据、控制 C&#xff0e;数据、控制、状态 D&#xff0e;控制、缓冲2&#xff0e;独立I&#xff0f;O端口编址方式中&#xff0c;端口地址…

Java本地文件操作

概述&#xff1a;Java本地文件操作&#xff0c;涉及到文件/文件夹的创建&#xff0c;文件/文件夹属性的读取与设置&#xff0c;文件/文件夹的重命名&#xff0c;目录结构的遍历&#xff0c;以及文件内容的读取与写入。 File属于java.io.File。 ---在Eclipse的大纲视图界面&…

GitBlit使用安装教程~

GitBlit使用安装教程~GitBlit是什么&#xff1f;Gitblit 是一个纯 Java 库用来管理、查看和处理 Git 资料库.相当于 Git 的 Java 管理工具.git的管家,通俗点来说就是一个相当于SVN的工具,用于多个人共同开发同一个项目&#xff0c;共用资源的目的。 下载与安装&#xff1a; 1. …

怎么用计算机名称共享打印机设置,如何共享打印机设置教程

打印机怎么共享&#xff0c;算是老问题了&#xff0c;但很多时候分享都是老系统的&#xff0c;这里分享WIN7系统和win10系统两种系统的打印机如何共享的设置教程。一、WIN7设共享准备工作&#xff1a;添加打印机之前我们要知道主机的一些信息&#xff0c;如计算机名、工作组、共…

Java项目转变为Java Web项目

1、找到项目工作空间目录&#xff0c;打开.project文件&#xff0c;并修改文件&#xff0c; 修改如下&#xff1a; 找到&#xff1a;<natures> </natures>代码段&#xff0c;在代码段中加入如下内容并保存&#xff1a; <nature>org.eclipse.wst.common.proje…

计算机网络学习总结

计算机网络学习总结~1. OSI&#xff0c;TCP/IP,五层协议的体系结构&#xff0c;以及各层协议&#xff1a; OSI 分层&#xff1a;7层&#xff0c;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层 TC…

计算机网络实验报告校园网,校园网规划与设计实验报告.docx

校园网规划与设计实验报告校园网的规划与设计实验报告篇一&#xff1a;校园网设计与规划报告(计算机网络大实验)  《计算机网络》实践报告  校园网设计与规划   专 业&#xff1a; 软件工程   班 级&#xff1a; 软件0901  姓 名&#xff1a; 李双双  学 号:  指…

Linux(Ubuntu)下设置开机自启shell脚本执行Java程序jar包

一、建立脚本文件&#xff1a; 二、设置权限 三、将脚本文件放到启动目录下 四、更新优先级 cd /etc/init.d sudo update-rc.d startm.sh defaults 90 至此&#xff0c;开机启动已经完成&#xff0c;我们可以通过reboot重启linux&#xff0c;来查看jar包是否已经启动成功。而…

鼠标键盘与计算机无法连接,只有三个步骤可以轻松解决无法识别计算机,键盘和鼠标的问题!...

对于大多数人来说&#xff0c;无论是笔记本电脑还是台式机&#xff0c;浏览网络&#xff0c;聊天&#xff0c;玩游戏和办公室工作都像进食和喝水一样容易。但是了解计算机并不意味着了解计算机。有时&#xff0c;一个非常常见的小问题“键盘和鼠标无法响应”常常使许多朋友感到…

git学习入门~~~

创建版本库&#xff08;又名仓库&#xff0c;repository&#xff09;&#xff0c;可以理解为一个仓库&#xff0c;这个目录里面的所有文件都可以被Git管理起来&#xff0c;每个文件的修改、删除&#xff0c;Git都能跟踪&#xff0c;以便任何时刻都可以追踪历史&#xff0c;或者…

Linux(Ubuntu)设置系统时区

设置东八区的时间&#xff1a; #cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 查看&#xff1a; #date 如果现实CST即为正确。 另外&#xff0c;Java打成jar包后再linux下运行&#xff0c;获取的时间有可能不正确&#xff0c;我们需要修改一个文件&#xff0c;Ubuntu系…

兰州交通大学计算机科学与技术排名,兰州交通大学怎么样 全国排名是多少

兰州交通大学&#xff0c;原名兰州铁道学院&#xff0c;是我国第三所铁路院校。兰州交通大学学科特色鲜明、门类齐全&#xff0c;是中央部委投资省部共建重点大学&#xff0c;下面小编为大家详细介绍&#xff0c;供大家参考。兰州交通大学排名2020年兰州交通大学全国排名第166名…

数据库的哪些事儿~~

一 . 事务的四个特性&#xff1f; 四大特性是&#xff1a;ACID 原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、持久性&#xff08;Durability&#xff09;介绍四个特性概念&#xff1b; 原…

众友科技计算机组成原理,组成原理:采用微程序控制器的模型机CPU设计(10页)-原创力文档...

课程设计报告课程名称&#xff1a; 计算机组成原理设计题目&#xff1a; 采用微程序控制器的模型机 CPU设计院 系&#xff1a;班 级&#xff1a;设 计 者&#xff1a;学 号&#xff1a;指导教师&#xff1a;目 录课程设计(大作业)报告 1昆明学院课程设计(大作业)任务书 错误&am…

JVM 运行时数据区域总结

引言 本博客总结自《深入理解 Java 虚拟机》&#xff0c;第二章。 一、概述 Java 虚拟机在执行 Java 程序的时候会把它所管理的内存划分为若干个不同的数据区域。 记忆口诀&#xff1a;两栈一计数&#xff0c;一堆一方法。 解释&#xff1a;第一句两栈分别是VM栈和本地方法栈…

一篇博客读懂设计模式之---单例模式

一篇博客读懂设计模式之---单例模式 一。 单例模式 单例对象&#xff08;Singleton&#xff09;是一种常用的设计模式。在Java应用中&#xff0c;单例对象能保证在一个JVM中&#xff0c;该对象只有一个实例存在。这样的模式有几个好处&#xff1a; 1、某些类创建比较频繁&…