探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制


Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南


自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

文件上传概述

文件上传通常指的是用户在浏览器中通过表单form将文件上传至服务端

但是请注意该表单必须满足如下三个条件:

  • form的method必须是post
  • form的enctype必须是multipart/form-data
  • form中利用input type=”file”提供上传的入口

Commons-fileupload简介

Commons-fileupload是Apache提供的一个用来处理表单文件上传的一个开源组件。该组件操作简单、API通俗易懂、性能优异。

使用Commons-fileupload需要导入两个jar包:

  • commons-fileupload
  • commons-io

Commons-fileupload使用示例

我们先来准备一个表单form

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body><form enctype="multipart/form-data" action="${pageContext.request.contextPath }/servlet" method="post" >文件描述:<input type="text" name="description"/><br/><br/>选择文件:<input type="file" name="photo"/><br/><br/><input type="submit" value="上传"/><br/><br/></form>
</body>
</html>

运行后效果如下图所示:

再来写一个处理文件上传的Servlet

/*** 本文作者:谷哥的小弟* 博客地址:http://blog.csdn.net/lfdfhl*/
package cn.com;import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;public class UploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 判断表单是否支持文件上传boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);if (isMultipartContent) {DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload servletFileUpload = new ServletFileUpload(factory);servletFileUpload.setHeaderEncoding("UTF-8");try {//得到并处理表单中的每个项List<FileItem> fileItems = servletFileUpload.parseRequest(request);for (FileItem fileitem : fileItems) {if (fileitem.isFormField()) {processFormField(fileitem);} else {processUploadField(fileitem);}}} catch (Exception e) {e.printStackTrace();}}}// 处理普通表单项private void processFormField(FileItem fileitem) {try {String fieldName = fileitem.getFieldName();String fieldValue = fileitem.getString("UTF-8");System.out.println(fieldName + "=" + fieldValue);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}//处理上传表单项private void processUploadField(FileItem fileItem) {try {//创建存放上传文件的目录String folderName="upload";String folderPath = getServletContext().getRealPath("/WEB-INF/"+folderName);File folder = new File(folderPath);if (!folder.exists()) {folder.mkdirs();}//生成不重复的文件名String fileName = fileItem.getName();if (fileName != null) {fileName = FilenameUtils.getName(fileName);}fileName = UUID.randomUUID() + "_" + fileName;//按照日期生成子文件名称String dateDirectory = makeDateDirectory(folder);//存放被上传的文件File file=new File(folder, dateDirectory + File.separator + fileName);fileItem.write(file);} catch (Exception e) {e.printStackTrace();}}//依据日期生成子文件夹private String makeDateDirectory(File folder) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");Date date=new Date();String dateDirectory = simpleDateFormat.format(date); File file = new File(folder, dateDirectory);if (!file.exists()) {file.mkdirs();}return dateDirectory;}
}

嗯哼,鉴于该示例比较简单和代码里已有的注释,在此不再对代码作详解。


文件上传的注意事项

实际开发中,在处理文件上传时请注意以下问题:

  • 将保存上传文件的目录放在用户直接访问不到的地方,比如WEB-INF
  • 上传文件重名的处理,可用UUID+文件名的方式
  • 将上传文件合理地存入子目录中,比如按照日期
  • 限制上传文件的大小,比如3M

后台(27)——文件上传相关推荐

  1. 任意文件上传mysql_[代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)...

    0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...

  2. delphi用indy实现php后台的文件上传下载

    indy控件使用方便,用indy来下载的资料网上很好找.因业务需要使用了indy上传,php后台来接收文件.主要代码如下: delphi: uses IdMultipartFormData 单元 Po ...

  3. html上传文件与后台处理,关于前端html图片和文件上传和后台接收方法

    前些时间项目和h5交互时涉及到了文件上传的一个功能,但是h5在写上传的时候总是上传不上,所以花时间专门看了下web端的文件上传记录下. 第一种是前端写的,拿来修改了下,这种方法在上传的时候需要用到jq ...

  4. 易优cms后台RCE以及任意文件上传漏洞

    前言 EyouCms是基于TP5.0框架为核心开发的免费+开源的企业内容管理系统,专注企业建站用户需求提供海量各行业模板,降低中小企业网站建设.网络营销成本,致力于打造用户舒适的建站体验.易优cms ...

  5. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  6. Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  7. 东塔靶场之文件上传cms--pluck

    东塔靶场之文件上传cms–pluck pluck是一个小型简单的内容管理系统,由PHP写成.即使你没有编程语言知识,也可以很容易地使用它来管理站点,功能有给页面插照片.在blog里写文章.分享照片等 ...

  8. SpringMVC——文件上传下载,异步请求和SSM整合

    一,SpringMVC文件上传下载 1.1 同步 1.1.1 文件上传 第一步:定义上传表单 <form action="${pageContext.request.contextPa ...

  9. 【代码审计-2】PHP框架MVC类文件上传断点测试挖掘

    1.文件上传漏洞挖掘: (1)关键字搜索(函数.键字.全局变量等):比如$_FILES,move_uploades_file等 (2)应该功能抓包:寻找任何可能存在上传的应用功能点,比如前台会员中心, ...

最新文章

  1. python中weekid什么意思_week_one-python格式化输出
  2. Lazy WriterCheckPoint
  3. 回文字符串—回文子串—Manacher算法
  4. PMP之敏捷图表之产品地图VS产品路线图
  5. HDU 5608 function (杜教筛)
  6. vivo U3开启预约:搭载骁龙675
  7. Step by Step演示如何训练Pytorch版的EfficientDet
  8. android view绘制速度,关于android ui的优化 view 的绘制速度
  9. 环保工位机重装系统需要备份的文件
  10. 计算机网络的通信方式有哪几种,数据通信方式有哪几种
  11. 本地开发微信网页时如何调试微信sdk
  12. 基于ESP32的智能鱼缸系统
  13. vscode中显示隐藏文件
  14. GridView绑定
  15. 【论文笔记】Combining EfficientNet and Vision Transformers for Video Deepfake Detection
  16. 刚开始学Python
  17. 【软件测试】测试大纲编写模板范文
  18. python实现pdf文件合并,多个pdf文件合并,pdf文件叠加
  19. Mac系统下利用ADB命令连接android手机并进行文件操作
  20. 阿里面试,问了我乐观锁、悲观锁、AQS、sync和Lock,这个回答让我拿了offer

热门文章

  1. 一维数据高斯滤波器_透彻理解高斯混合模型
  2. 缩进一个字符_Indesign里标点挤压及首行缩进2字符设置
  3. php 文件保存函数,PHP文件函数
  4. js修改html不成功,为什么这段代码中用js修改css样式中的display属性却不成功?
  5. jaba窗体连接mysql增删改查_知识实现——Java使用jdbc连接MySql数据库,实现增删改查...
  6. element的滚动去掉横向_textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法
  7. java项目使用mybatis
  8. js面向对象写法,一个小例子
  9. vba htm转成图片_提取1000页PPT的图片,同事花了两小时,我只花了两分钟
  10. python采集_Python3做采集