文件上传至服务器

使用文件上传至服务器需要导入两包commons-fileupload-1.2.2.jar与commons-io-2.4.jar

本文的servlet使用的是 servlet3.0注解配置,   不用写web.xml 文件了

建立文件时使用javaEE6.0 支持servlet3.0

value的值就是访问路径
urlPatterns的值也是访问路径  例如
@WebServlet(name="DemoServlet3",value="/demoServlet3")
public class DemoServlet3 extends HttpServlet {
...
}

文件上传的表单

method 必须是post
enctype="multipart/form-data"

例如

<form action="${pageContext.request.contextPath}/uploadServlet" method="post" enctype="multipart/form-data">
	用户名:<input type="text" name="username"/><br/>
	请选择文件:<input type="file" name="nfile"/><br/>
	<input type="submit" value="上传"/>
</form>

  

创建表单的步骤

1.创建DiskFileItemFactory 工厂
DiskFileItemFactory dif = new DiskFileItemFactory();
2.创建ServletFileUpload 对象
ServletFileUpload sfu = new ServletFileUpload(dif);
3.判断表单提交 是不是 multipart/form-data
boolean isMultipart = sfu.isMultipartContent(request);

整体代码如下:

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet(name="UploadServlet" ,urlPatterns="/uploadServlet")
public class UploadServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("------------文件上传----------------");
		//文件上传路径   我的文件上传的是F:\tomcat7\webapps\javaweb下的新建file文件夹里
		String readPath=this.getServletContext().getRealPath("file");
		//创建DiskFileItemFactory工厂
		DiskFileItemFactory dif=new DiskFileItemFactory();
		ServletFileUpload sfu=new ServletFileUpload(dif);
		boolean iMmultipart = sfu.isMultipartContent(request);
		if(iMmultipart){
			//进行文件上传
			try {
				//解析请求    获取表单元素即表单的全部提交信息
				List<FileItem> items =sfu.parseRequest(request);
				if(items!=null){
					for (FileItem item : items) {
						if(item.isFormField()){          //判断是否是普通字段(即上传的用户名密码等)
							String fileName=item.getFieldName();
							String value=item.getString("UTF-8");
							System.out.println(fileName+"----------"+value);     //读取用户名密码等文件

						}else{
							//是要上传的文件
							//获取上传的文件名
							String fileName=item.getName();
							System.out.println("上传的文件名: "+fileName);
						          	//新建一个文件对象 第一个参数放文件上产路径
							File file=new File(readPath,fileName);
							//开始上传
							item.write(file);
							System.out.println("文件上传成功! 文件名是"+fileName);
						}
					}
				}
			} catch (FileUploadException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			doGet(request, response);
	}

  

如果再加上
限制文件上传的类型和大小
类型:
List<String> filTypes = Arrays.asList("jpg","png","gif","bmp");

大小:
//设置单个文件的最大限制
upload.setSizeMax(1024*30); 

获取上传文件名的后缀:
String fileType = fileName.substring(fileName.lastIndexOf(".")+1);
System.out.println("后缀:"+fileType);
boolean flag = filTypes.contains(fileType);

完整的代码如下:

package cn.bdqn.demo;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet(name="UploadServlet",value="/uploadServlet")
public class UploadServlet extends HttpServlet {

	private static final long serialVersionUID = -2590255173244980573L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("----文件上传---------");
		response.setContentType("text/html; charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");

		//获取上传文件的路径
		String realPath = this.getServletContext().getRealPath("files");
		System.out.println("上传路径:"+realPath);
		//1.创建DiskFileItemFactory
		DiskFileItemFactory dif = new DiskFileItemFactory();
		//2.创建ServletFileUpload 对象
		ServletFileUpload sfu = new ServletFileUpload(dif);
		//3.判断表单提交 是不是 multipart/form-data
		boolean isMultipart = sfu.isMultipartContent(request);
		if(isMultipart){
			//进行文件上传
			//ServletFileUpload 解析请求 获取元素集合
			List<String> filTypes = Arrays.asList("jpg","png","gif","bmp");
			//限定单个文件的大小
			sfu.setSizeMax(1024*30);    //最大30KB
			try {
				List<FileItem> items = sfu.parseRequest(request);
				if(items!=null){
					for(FileItem item : items){
						if(item.isFormField()){   //判断是否是普通字段
							String fieldName = item.getFieldName();
							String value = item.getString("UTF-8");
							System.out.println(fieldName+"---"+value);
						}else{
							//是文件   文件上传
							//获取上传的文件名
							String fileName = item.getName();
							//判断文件类型是否匹配:
							//获取后缀
							String fileType = fileName.substring(fileName.lastIndexOf(".")+1);
							System.out.println("后缀:"+fileType);
							boolean flag = filTypes.contains(fileType);
							if(flag){
								System.out.println("上传的文件名:"+fileName);
								//新建一个文件对象   第一个参数放文件上传路径
								File file = new File(realPath, fileName);
								//开始上传
								item.write(file);
								System.out.println("文件上传成功!");
								response.getWriter().print("文件上传成功!");
							}else{
								response.getWriter().print("上传失败!文件类型必须是jpg,png,gif,bmp!");
							}
						}
					}
				}
			}catch (FileUploadBase.SizeLimitExceededException e) {
				System.out.println("上传失败,文件太大,单个文件的最大限制是:"+sfu.getSizeMax()+"bytes!");
				response.getWriter().print("上传失败,文件太大,单个文件的最大限制是:"+sfu.getSizeMax()+"bytes!");
			}catch (Exception e) {
				e.printStackTrace();
			}
		}else{
			response.getWriter().print("表单不是multipart/form-data,文件上传失败!");
		}

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

  

时间: 2024-11-05 10:06:27

文件上传至服务器的相关文章

Android文件上传至服务器

项目演示及讲解 优酷  http://v.youku.com/v_show/id_XODk5NjkwOTg4.html 爱奇艺  http://www.iqiyi.com/w_19rs1v2m15.html#vfrm=8-7-0-1 土豆  http://www.tudou.com/programs/view/fv0H93IHfhM 项目下载 1.手机端选择文件上传至服务器端 http://download.csdn.net/detail/u010134178/8457679 2.手机端拍照上传

.net 文件上传到服务器【转】

最忌你在一个文档管理系统,包裹文件上传下载等. http://blog.csdn.net/pmy_c_l/article/details/73743843 官方链接:https://msdn.microsoft.com/zh-cn/library/system.io.filestream.read.aspx /// <summary> /// 读取本地文件上传到服务器 /// </summary> /// <param name="localfilepath&quo

c# 单个文件上传至服务器

#region 单个文件上传至服务器 /// <summary> /// 单个文件上传至服务器 /// </summary> /// <param name="uriAddress">接收文件资源的URI, 例如: http://xxxx/Upload.aspx?UID=11111</param> /// <param name="filePath">要发送的资源文件, 例如: @"D:\work

C# winform把本地文件上传到服务器上,和从服务器上下载文件

昨天在做项目过程中遇到需要把本地文件上传到服务器上的问题,在这里记录一下,方便大家互相学习! /// <summary> /// 上传文件方法/// </summary> /// <param name="filePath">本地文件所在路径(包括文件)</param> /// <param name="serverPath">文件存储服务器路径(包括文件)</param> public voi

客户端的文件上传到服务器,服务器返回文件的路径

客户端的文件上传到服务器,服务器返回文件的路径 返回信息,客户端将文件保存 客户端: <?php header('content-type:text/html;charset=utf8'); $url = 'http://192.168.1.118/legcc/aaa.php';//访问的服务器的地址 $curl = curl_init(); $path = 'D:\www\ceshi\a02.jpeg';//客户端文件的绝对路径 $source = file_get_contents($pat

Linux 文件上传Linux服务器

进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示出文本和基本的图形输出.众所周知,如今的Linux环境已经发生了巨大变化,所有的Linux发行版都配备了某种类型的图形化桌面环境.但是,如果向输入shell命令,仍然需要使用文本显示来访问shell的CLI. Linux发行版通常使用Ctrl+Alt组合键配合F1或F7来进入图形界面.Ubuntu使

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

最近做的一个项目中,有这样一个要求,在浏览器中调用系统的拍照功能或者选择文件,然后将文件上传到服务器,类似修改头像.        简单而言,就是在一个html页面中有这样一段代码 <input class="filePrew" type="file" capture="camera" accept="image/*" name="image"> 刚开始的时候,没有感觉很难的,因为在UC浏览器.

java文件上传到服务器

最近项目中使用到了文件从本地到服务器的功能.其实是为了解决目前浏览器不支持获取本地文件全路径.不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据. 在前台界面中 <form method="post" enctype="multipart/form-data" action="../manage/excelImport.do"> 请选文件:<input type="file&

Android文件上传-本地+服务器一条龙分析

本地: 先看下项目结构 MainActivity.java package com.huxq.uploadexample; import java.io.File; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Environment; import