关闭

文件上传

174人阅读 评论(0) 收藏 举报
分类:

文件上传


步骤:

    step1,给表单设置enctype="multipart/form-data".(http协议的要求)并且表单只能使用post方式提交。

    step2,在服务器端,不能使用request.getParameter方法。

    此时,需要调用request.getInputStream获得一个InputStream,然后,分析这个流获得数据。一般使用一些工具来分析这个流(比如,apache提供的file-upload.jar)。


一、用到的jar包

二、jsp文件代码

<%@ page language="java" pageEncoding="utf-8" 
contentType="text/html; charset=utf-8"%>
<html>
	<head></head>
	<body>
		<form action="fileupload" method="post" enctype="multipart/form-data">
			<fieldset>
				<legend>上传文件</legend>
				用户名:<input name="username"><br/>
				照片:<input type="file" name="file1"/><br/>
				<input type="submit" value="提交">
			</fieldset>
		</form>
	</body>
</html>

三、servlet代码

package web;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletContext;
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;

public class FileUploadServlet extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//step1,创建一个DiskFileItemFactory对象,该对象为解析
		//器提供解析时的缺省的配置
		DiskFileItemFactory dfif = new DiskFileItemFactory();
		//step2,创建解析器
		ServletFileUpload sfu = new ServletFileUpload(dfif);
		//step3,使用解析器来解析
		//解析器会调用request.getInputStream获的一个流,然后
		//分析这个流,并且将分析的结果封装到FileItem对象里面。
		//一个FileItem对象封装了一个表单域中的所有数据。
		try {
			List<FileItem> items = sfu.parseRequest(request);
			System.out.println(items.size());
			//只需要遍历items集合就可以访问表单中的每一个
			//表单域的数据。
			for(int i=0;i<items.size();i++){
				FileItem curr = items.get(i);
				if(curr.isFormField()){
					//普通表单域
					String fieldname = curr.getFieldName();
					System.out.println("fieldname:"+fieldname);
					String  username = curr.getString();
					System.out.println("username:"+username);
				}else{
					//上传文件域
					//把用户上传的文件保存到upload文件夹
					ServletContext sctx = getServletContext();
					//String getRealPath(String path) -- path相对该应用的路径
					//依据逻辑路径获得实际部署的物理路径
					String path = sctx.getRealPath("upload");
					System.out.println("path:"+path);
					//下面两行为测试代码
					//String path1 = sctx.getRealPath("a");
					//System.out.println("path1:"+path1);
					
					//获得文件名
					String filename = curr.getName();
					File file = new File(path+File.separator+filename);
					curr.write(file);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

具体细节及解析见代码



0
0
查看评论

文件上传模板

在开发中我们经常会写文件上传的接口,那么测试的时候每次都要自己写一次表弟验证写的接口是否正确,下面给出一个通用的模板: --> 要上传的文件1
  • u014520745
  • u014520745
  • 2016-10-19 13:46
  • 701

文件上传---文件上传

先上代码import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; /*** 上传的文件*/ public class F...
  • u010715440
  • u010715440
  • 2014-11-18 19:29
  • 204

文件上传漏洞原理与实例测试

0x00 什么是文件上传 为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门。即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他...
  • wuqiongrj
  • wuqiongrj
  • 2016-07-22 17:32
  • 3515

Yii框架中文件上传

1:在数据库中建立一张表(upload,我的表是这样的: 2:使用Gii生成model层; <?php namespace app\models; use yii\web\UploadedFile; use Yii; /** * This is the model class for...
  • matiantian666
  • matiantian666
  • 2016-06-30 10:12
  • 957

struts2 实现文件上传原理

struts2 实现文件上传原理   通过struts2实现文件上传功能,主要jar包是不可少的包括: aopalliance.jar  ------------------------------------为aop(面向切面)提供了最普通和通用的接口 asm-3.3.jar  ----...
  • gazer_yuol
  • gazer_yuol
  • 2015-07-31 00:22
  • 1445

JSP 实现文件上传

JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。 本章节我们使用 Servlet 来处理文件上传,使用到的文件有: upload.jsp : 文件上传表单。 message.jsp : 上传成功后跳转页面。 Uploa...
  • SUN_song520
  • SUN_song520
  • 2016-12-12 13:59
  • 1650

PHP学习(7)-文件的上传

本文介绍如何把文件上传到服务器并保存。1.一个文件上传表单<html> <body> <form action="upload_file.php" method="post" enctype="multipart/for...
  • u012426959
  • u012426959
  • 2017-12-04 09:15
  • 138

SpringBoot非官方教程 | 第十七篇:上传文件

这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件。构建工程为例创建一个springmvc工程你需要spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖。为例能够上传文件在...
  • forezp
  • forezp
  • 2017-04-30 16:42
  • 23839

web安全之文件上传漏洞攻击与防范方法

一、 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。 文件上传漏洞本身就是一个危害...
  • u014609111
  • u014609111
  • 2016-09-29 14:48
  • 16617

文件上传漏洞和修复方案

现代互联网的web应用程序中,文件上传是一种常见的要求,因为它有助于一高业务效率。在大型社交网络程序中都支持文件上传功能。在博客,论坛,电子银行网络,会给用户和企业员工有效的共享文件。允许上传图片,视频,头像和许多其他类型文件。
  • pygain
  • pygain
  • 2016-10-22 15:11
  • 4429
    个人资料
    • 访问:279379次
    • 积分:6023
    • 等级:
    • 排名:第4989名
    • 原创:351篇
    • 转载:36篇
    • 译文:0篇
    • 评论:27条
    文章分类