文件上传

SpringMVC文件上传接口设计与实现

旧城冷巷雨未停 提交于 2019-12-04 00:29:37
#1 前两篇文章的铺垫 #1.1 SpringMVC文件上传源码分析前言 #1.2 apache fileupload源码分析 #2 整体的包结构 首先看下整体的包的结构,如下图 总共分成3大块,分别如下 ##2.1 org.springframework.web.multipart 存放Spring定义的文件上传接口以及异常,如 MultipartException对用户抛出的解析异常(隐藏底层文件上传解析包所抛出的异常) 也就指明了,这个体系下只能抛出这种类型的异常,MaxUploadSizeExceededException是MultipartException它的子类,专门用于指定文件大小限制的异常。 用户不应该看到底层文件上传解析包所抛出的异常,底层采用的文件上传解析包在解析文件上传时也会定义自己的解析异常,这时候就需要在整合这些jar包时,需要对解析包所抛出的异常进行转换成上述已统一定义的面向用户的异常 源码见证下: protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException { String encoding = determineEncoding(request); FileUpload fileUpload =

使用struts2在页面局部位置上传文件,不影响其他文本框数据

a 夏天 提交于 2019-12-04 00:17:30
这个问题主要源于实验室项目的开发需求的变化。之前的需求只是简单的进行一系列数据的输入和选择,然后提交数据,所以之前一直使用jQuery的ajax的方式进行数据提交,在url中直接传递过去拼接好的页面输入和选择的数据。之前的功能页面如下: 之后跟客户沟通,客户需要在该功能操作区域加上上传文件的功能,项目中使用struts2进行文件的上传,于是就有两种解决方案产生: 1.在整个功能操作区域加上<form></form>标签,在提交数据的时候进行文件上传,但是这种方式对于我们的项目来说改动比较大。 2.在该页面加上一个上传按钮,在浏览选择好文件之后,直接单击“上传”按钮完成数据的上传,于是就遇见了一个问题,在使用struts2进行文件上传的时候,需要在struts配置文件中配置一个跳转的页面,如果上传成功之后跳转到现在的页面,就会导致之前选择和输入的数据的丢失。 针对第二种解决思路遇见的问题,就采用了标题所说的在局部位置进行上传文件,不影响其他文本框中的数据,解决方案如下: 1.定义一个uploadFile.jsp页面,将文件上传单独放在这个页面里面,由这个页面完成文件的上传。 <form id="addForm" action="ffamanage/WareHouse_uploadFileAction" method="post" enctype="multipart/form

两种文件上传的实现-Ajax上传和form+iframe

可紊 提交于 2019-12-04 00:17:15
前言 话说现在很多很多项目需要用到文件上传,自从有了HTML5之后,上传就变的超级简单了。HTML5支持多图片上传,而且支持ajax上传!而且支持上传之前图片的预览!而且支持图片拖拽上传!而且还是纯粹利用file控件实现!而且代码还超级简单!!!原谅我这个没见过世面的人这么激动==,但是说真的,有这么多优点,想不让人称赞都难啊! HTML5 Ajax上传 html5的上传实现,是需要file控件以及XMLHttpRequest请求。下面是我使用原生js封装的一个上传插件: function fileUpload(options) { var opts = options || {}; var func = function() {}; this.fileInput = opts.fileInput || null; this.url = opts.url || ''; this.fileList = []; this.onFilter = opts.onFilter || function(f) {return f;}; //选择文件组的过滤方法 this.onSelect = opts.onSelect || func; //文件选择后 this.onProgress = opts.onProgress || func; //文件上传进度 this.onSuccess =

前端大文件上传

早过忘川 提交于 2019-12-03 22:42:22
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成。 下面从文件上传方式入手,整理大文件上传的思路,并给出了相关实例代码,由于PHP内置了比较方便的文件拆分和拼接方法,因此服务端代码使用PHP进行示例编写。 本文相关示例代码位于github上,主要参考 聊聊大文件上传 大文件切割上传 文件上传的几种方式 首先我们来看看文件上传的几种方式。 普通表单上传 使用PHP来展示常规的表单上传是一个不错的选择。首先构建文件上传的表单,并指定表单的提交内容类型为enctype="multipart/form-data",表明表单需要上传二进制数据。 然后编写index.php上传文件接收代码,使用move_uploaded_file方法即可(php大法好…) form 表单上传大文件时,很容易遇见服务器超时的问题。通过xhr,前端也可以进行异步上传文件的操作,一般由两个思路。 文件编码上传 第一个思路是将文件进行编码,然后在服务端进行解码,之前写过一篇在前端实现图片压缩上传的博客

使用SmartUpload组件实现文件上传

浪尽此生 提交于 2019-12-03 19:12:48
文件上传是做 JavaWeb 项目中经常使用的功能,而 SmartUpload 是一个可免费使用的全功能的文件上传下载组件。虽然此组件最近很少有更新,但由于其简单易用,对于一般的项目来说还是一个很好 的选择。下面以一个具体的例子来说明此组件的使用。 首先,将 SmartUplaod 的 jar 文件放入项目的 lib 目录中。 然后,我们开发上传用的 JSP 页面,为了简单起见,本表单中仅包含了用户上传文件的文件域和一个上传按钮。效果如下: 需要注意的是,表单中使用了文件域,则表单提交类型( method )必须为 post 而且添加 enctype="multipart/form-data" 。 有了上传页面,下面编写处理上传的 Servlet ,代码如下: publicclass UploadServlet extends HttpServlet { privatestaticfinallong serialVersionUID = 1L; protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 对象输出声明 response.setContentType( "text/html;charset

Struts2之上传文件

假装没事ソ 提交于 2019-12-03 17:15:11
一、单文件上传   1.定义form表单 <form action="uploadFile" method="post" enctype="multipart/form-data"> 上传文件:<input type="file" name="myFile"> <input type="submit" value="提交"> </form>   重点:     (1)form表单上添加属性enctype="multipart/form-data"     (2)文件选择的input标签type设置为file   2.定义文件上传Action (根据需求自定义) package com.yg.study.action; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; public class FileUploadAction { private File myFile; private String myFileFileName; public File getMyFile() { return myFile; } public void setMyFile(File myFile) { this.myFile = myFile; } public

IE浏览器如何实现断点续传

大兔子大兔子 提交于 2019-12-03 16:54:36
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验; 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包含层级结构。 支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。 支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同。 支持断点续传,关闭浏览器或刷新浏览器后仍然能够保留进度。 支持文件夹结构管理,支持新建文件夹,支持文件夹目录导航 交互友好,能够及时反馈上传的进度; 服务端的安全性,不因上传文件功能导致JVM内存溢出影响其他功能使用; 最大限度利用网络上行带宽,提高上传速度; 分析: 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传 从上传的效率来看,利用多线程并发上传能够达到最大效率。 解决方案: 文件上传页面的前端可以选择使用一些比较好用的上传组件,例如百度的开源组件WebUploader,泽优软件的up6,这些组件基本能满足文件上传的一些日常所需功能,如异步上传文件,文件夹,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,甚至是大文件断点续传,大文件秒传。

Apache Commons fileUpload实现文件上传

荒凉一梦 提交于 2019-12-03 05:09:08
找了好久,才找到的,很实用 将 Apache 的 commons-fileupload.jar 放在应用程序的 WEB-INF\lib 下 , 即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的 fileUpload 版本为 1.2 ,环境为 Eclipse3.3+MyEclipse6.0 。 FileUpload 是基于 Commons IO 的,所以在进入项目前先确定 Commons IO 的 jar 包(本文使用 commons-io-1.3.2.jar )在 WEB-INF\lib 下。 此文作示例工程可在文章最后的附件中下载。 示例 1 最简单的例子,通过 ServletFileUpload 静态类来解析 Request ,工厂类 FileItemFactory 会对 mulipart 类的表单中的所有字段进行处理,不只是 file 字段。 getName ()得到文件名, getString ()得到表单数据内容, isFormField ()可判断是否为普通的表单项。 demo1.html < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=GB18030" > < title > File upload </ title > </ head >