文件上传之二利用frame实现无页面刷新的文件上传

2024-06-07 16:00:48

在上一篇文章中是将文件随表单中其他数据一起提交的,这样在提交一个表单时需要较长的时间,用户体验不是很好。一般网站选择将文件与表单的其他数据分开而单独上传。本文介绍如何利用iframe标签将上传文件模块嵌套在表单中,实现无页面刷新的文件上传。

表单页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <div>
  11. <div>
  12. <h3>Frame嵌套的方式上传文件</h3>
  13. </div>
  14. <div>
  15. <form action="" method="post">
  16. <div>
  17. <span>文件名:</span>
  18. <input type="text" name="filename" />
  19. </div>
  20. <div>
  21. <iframe src="FrameFileUpload.jsp"></iframe>
  22. </div>
  23. <div>
  24. <input type="submit" value="提交" />
  25. </div>
  26. </form>
  27. </div>
  28. </div>
  29. </body>
  30. </html>

文件上传页面(通过iframe嵌套在表单页面)

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>File Upload</title>
  8. </head>
  9. <body>
  10. <div>
  11. <form action="frameFileLoadAction" enctype="multipart/form-data"
  12. method="post">
  13. <div>
  14. <input type="file" name="file" id="file_upload" />
  15. </div>
  16. <div>
  17. <input type="submit" value="上传" />
  18. </div>
  19. </form>
  20. </div>
  21. <div>
  22. <span>上传结果:</span>
  23. <span>
  24. <%
  25. String isSuccess = request.getParameter("isSuccess");
  26. if ("1".equals(isSuccess)) {
  27. out.print("上传成功");
  28. } else if ("0".equals(isSuccess)) {
  29. out.print("上传失败");
  30. } else {
  31. out.print("还没有上传文件");
  32. }
  33. %>
  34. </span>
  35. </div>
  36. </body>
  37. </html>

struts2配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="true" />
  7. <constant name="struts.i18n.encoding" value="UTF-8" />
  8. <constant name="struts.ui.theme" value="simple" />
  9. <constant name="struts.multipart.maxSize" value="100" />
  10. <constant name="struts.multipart.saveDir " value="c:/tmp" />
  11. <package name="fileUpload" extends="struts-default" namespace="/">
  12. <action name="frameFileLoadAction" class="com.study.action.FileUploadAction"
  13. method="execute">
  14. <param name="filePath">/filetemp</param>
  15. <result name="success">/FrameFileUpload.jsp?isSuccess=1</result>
  16. <result name="input">/FrameFileUpload.jsp?isSuccess=0</result>
  17. </action>
  18. </package>
  19. </struts>

Struts2的Action

  1. package com.study.action;
  2. import java.io.File;
  3. import org.apache.struts2.ServletActionContext;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. import com.study.util.FileCopyUtil;
  6. public class FileUploadAction extends ActionSupport {
  7. protected File file;
  8. protected String fileFileName;
  9. protected String fileContentType;
  10. protected String filePath;
  11. protected void restoreFile() throws Exception {
  12. if (this.file != null) {
  13. File temp = new File(ServletActionContext.getServletContext()
  14. .getRealPath(this.filePath) + "/" + this.fileFileName);
  15. FileCopyUtil.copy(this.file, temp);
  16. }
  17. }
  18. @Override
  19. public String execute() throws Exception {
  20. this.restoreFile();
  21. return "success";
  22. }
  23. public File getFile() {
  24. return file;
  25. }
  26. public void setFile(File file) {
  27. this.file = file;
  28. }
  29. public String getFileFileName() {
  30. return fileFileName;
  31. }
  32. public void setFileFileName(String fileFileName) {
  33. this.fileFileName = fileFileName;
  34. }
  35. public String getFileContentType() {
  36. return fileContentType;
  37. }
  38. public void setFileContentType(String fileContentType) {
  39. this.fileContentType = fileContentType;
  40. }
  41. public String getFilePath() {
  42. return filePath;
  43. }
  44. public void setFilePath(String filePath) {
  45. this.filePath = filePath;
  46. }
  47. }

总结:通过iframe嵌套文件上传页面,从而将文件上传与其他数据分开提交。其实刷新的是iframe。但这样整个页面不会刷新,给用户的感觉更好。

PS:上传文件后可以将文件的存储位置返回并放在表单中与其他数据一块上传。

转载于:https://blog.51cto.com/zhbhun/1165506

文件上传之二利用frame实现无页面刷新的文件上传相关推荐

  1. vue路由传参的三种方式/含页面刷新参数丢失解决方案(详细)

    vue路由传参的三种方式以及页面刷新参数丢失问题 一.路由传参的三种方式 1.传参方式一:params传参 2.传参方式二:路由属性配置传参 3.传参方式三:query传参 二.三种传递方式的区别 一 ...

  2. 无页面刷新 文件上传

    做后台时遇到这么一个问题,页面里有图片上传的需求,而且上传个数由具体后台页面确定. cank

  3. linux创建和编辑文件,linux基础-第九单元 利用vi编辑器创建和编辑正文文件

    vi编辑器简介 什么是vi vi编辑器的操作模式 vi编辑器的3种基本模式 在vi编辑器中光标的移动 移动光标位置的键与光标移动间的关系 进入插入模式 从命令行模式进入插入模式的命令 在命令行模式下删 ...

  4. 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间...

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! 接上回 <高性能流媒体服务器EasyDSS前端重构(一 ...

  5. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(二)-webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间

    接上篇 在上一篇博客中, 我们白手起家, 从零搭建了 webpack + vue + AdminLTE 多页面脚手架. 代码在这里: easydss-web-src , 我为第一篇博客建立了单独的分支 ...

  6. python get请求 url传参_用Python-get方法向页面发起请求,参数传不进去是怎么回事...

    源自:4-1 接口测试工具-python-get接口实战 用Python-get方法向页面发起请求,参数传不进去是怎么回事 #-*-coding:utf-8-*- import urllib impo ...

  7. 淘宝/天猫开放平台新商品发布API接口,商品发布接口,店铺上传接口,利用淘宝新品发布商品接口进行上传商品至淘宝店铺,接口对接方案

    一.淘宝/天猫开放平台新商品发布API接口参数说明: 1.通过注册key和secret得到测试账号,然后给到淘宝应用市场的店铺授权购买,然后再平台上面进行店铺添加审核,审核通过后即可用请求链接上传商品 ...

  8. 2022-08-01 零基础吉他入门知识(二) 吉他上的十二平均律,给吉他调弦,规范化弹吉他:节拍器,持琴姿势和拨弦手势

    文章目录 0.回顾 1.吉他上的十二平均律 钢琴上的十二平均律:七个白键+五个黑键组成数量为12的不同音调的音阶 吉他上的十二平均律:找出每一根弦上的1234567 吉他上的音阶把位图[记忆] 2.给 ...

  9. html 动态调用php文件,html静态页面调用php文件的方法

    html静态页面调用php文件的方法 本文实例讲述了html静态页面调用php文件的方法.分享给大家供大家参考.具体方法如下: 静态页面中看上去好像是不能直接调用php文件的,但是却可以使用js调用方 ...

最新文章

  1. 真实,假期无限延长后的研究生们的生活~
  2. 疫情过后,对医疗AI行业带来的机遇
  3. 怎样用vc 做一个c语言,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  4. C++ Primer 5th笔记(chap 12 动态内存)动态数组
  5. python grequests极限_Python使用grequests并发发送请求
  6. 【Java】Java实现 JSON 的组装和解析
  7. C#开发组态软件心路历程
  8. 诺基亚PC套件界面设计
  9. 上海道宁联合德国think-cell,为您提供更便捷高效的PowerPoint插件
  10. C++ P1510 精卫填海
  11. SpringCloud-创建服务消费者-Feign方式(附代码下载)
  12. python 判断是否为中文
  13. 重装系统(win10企业版)
  14. 各种稀奇古怪的问题(持续更新中)
  15. Kubernetes高可用性监控:Thanos的部署
  16. 顺丰bsp系统 java_顺丰BSP订单号查询接口SOAP的请求示例
  17. SAS中创建分组变量
  18. MongoDB数据库授权认证
  19. xps in html5,好看的轻薄笔记本,戴尔XPS 13 2in-1评测
  20. DIY BROADCAST : How to build your own Internet TV Channel with Open-Source other goodies

热门文章

  1. 【转载】java InputStream读取数据问题
  2. Android风格与主题
  3. python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file:
  4. kafka消息存储格式
  5. 北京林业大学计算机科学与技术考研科目,北京林业大学计算机科学与技术考研经验-北林信息学院考研辅导班...
  6. Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips
  7. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
  8. POJ 1183 反正切函数的应用(数学代换,基本不等式)
  9. get_class 方法
  10. 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享