热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaWeb文件上传:前端实现与后端处理详解

在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用ApacheCommonsFileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。

上传文件的分类:

无论什么方式上传文件,都要用post提交

方式一:

前端:表单方式上传文件

后端:

使用上传技术是apache中的Commons-fileupload.jar

commons-io.jar

servlet:

1.在表单提交的时候把表单中的所有的数据封装给request对象

2.通过commons-fileupload的api方法转换request对象

中的数据到一个List集合中

// Parse the request

List items = upload.parseRequest(request);

3.遍历 list集合,集合中都包含表单中所有的数据

包含文件域和非文件域

// Process the uploaded items

Iterator iter = items.iterator();

while (iter.hasNext()) {

FileItem item = iter.next();

if (item.isFormField()) {

//是非文件域

String name = item.getFieldName();

String value = item.getString();

...

} else {

//文件域

String fieldName = item.getFieldName();

String fileName = item.getName();

String contentType = item.getContentType();

boolean isInMemory = item.isInMemory();

long sizeInBytes = item.getSize();

...

//真正上传文件

item.write(服务端的某个目录)

}

}

spring mvc:

在springmvc中底层使用还是commons-fileupload.jar

和commons-io.jar,说明spring mvc对apache的Commons-fileupload

产品做二次封装,封装成:org.springframework.web.multipart.commons.CommonsMultipartResolver

在springmvc上传文件api用CommonsMultipartResolver类中的api

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

用springmvc的api上传文件

MultipartFile的对象调用一个上传方法

对象.transto();把文件上传到指定的服务器上

方式二:

前端:没有表单,用ajax上传文件,必须借助第三方

js工具ajaxfileupload.js,类似的上传文件

的js工具有很多,ajaxfileupload.js工具是基于

jquery库

//异步提交

$.ajaxFileUpload({

url:basePath+"user/new",//提交的服务器地址

secureuri:false,//url链接是否安全

fileElementId:"addHeadPicture",//文件域的id

type:"post",//必须是post提交

data:{"loginName":loginName,"password":password1,"nickName":nickName,"age":age,"sex":sex,"roleId":roleId},//传递的数据

dataType:"text",//注意text,可以写成json

success:function(data,status){

//alert(data);

//回的结果串中有其他的字符串,通过下面的方式

//把没用的字符串替换掉

data=data.replace(/

/g,'');

data=data.replace("

",'');

data=data.replace("

",'');

data=data.replace(/

/g,'');

data=data.replace("

",'');

data=data.replace("

",'');

alert(data);

},

error:function(){

alert("请求失败!");

}

});

后端:

使用上传技术是apache中的Commons-fileupload.jar

commons-io.jar

servlet:

1.在表单提交的时候把表单中的所有的数据封装给request对象

2.通过commons-fileupload的api方法转换request对象

中的数据到一个List集合中

// Parse the request

List items = upload.parseRequest(request);

3.遍历 list集合,集合中都包含表单中所有的数据

包含文件域和非文件域

// Process the uploaded items

Iterator iter = items.iterator();

while (iter.hasNext()) {

FileItem item = iter.next();

if (item.isFormField()) {

//是非文件域

String name = item.getFieldName();

String value = item.getString();

...

} else {

//文件域

String fieldName = item.getFieldName();

String fileName = item.getName();

String contentType = item.getContentType();

boolean isInMemory = item.isInMemory();

long sizeInBytes = item.getSize();

...

//真正上传文件

item.write(服务端的某个目录)

}

}

spring mvc:

在springmvc中底层使用还是commons-fileupload.jar

和commons-io.jar,说明spring mvc对apache的Commons-fileupload

产品做二次封装,封装成:org.springframework.web.multipart.commons.CommonsMultipartResolver

在springmvc上传文件api用CommonsMultipartResolver类中的api

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

用springmvc的api上传文件

MultipartFile的对象调用一个上传方法

对象.transferTo();把文件上传到指定的服务器上

补充:

能够给服务端提交数据的方式

1.用form表单

2.用超链接

3.用ajax异步提交



推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 在 Swift 编程中,遇到错误提示“一元运算符 '!' 不能应用于 '()' 类型的操作数”,通常是因为尝试对没有返回值的方法或函数应用逻辑非运算符。本文将详细解释该错误的原因,并提供解决方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
author-avatar
手机用户2502911627_202
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有