通过Servlet实现页面上传文件(到硬盘F)

原创 2016年08月31日 10:37:41
package servlet4;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileUpLoad extends HttpServlet {

	// 编码
	private String encoding = "UTF-8";
	// 解码
	private String decoding = null;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");

		ServletInputStream sis = req.getInputStream();

		int len = req.getContentLength();
		int index = 0;
		String tmp = null;
		boolean isFirst = true;
		String firstLine = null;
		int[] iindex = new int[1];
		byte[] bytes = new byte[4096];
		String filename = null;

		while ((tmp = readLine(bytes, iindex, sis, encoding)) != null) {
			if (isFirst) {
				firstLine = tmp;
				isFirst = false;
			}
			index = tmp.indexOf("filename=");

			// 得到要上传文件的文件名
			if (index != -1) {
				String tailString = tmp.substring(index + 10);
				if (tailString != null) {
					int ii = tailString.indexOf("\"");
					filename = tailString.substring(0, ii);
				}
				System.out.println(tmp);
				break;
			}
		}
		filename = getName(filename);
		if (filename == null) {
			filename = "file.out1";
		}
		String filepath = "f:/" + filename;
		FileOutputStream fos = new FileOutputStream(filepath);

		// 定义文件上传结束标志
		String endFlag = firstLine.substring(0, firstLine.length() - 2) + "--"
				+ firstLine.substring(firstLine.length() - 2);
		String contentType = readLine(bytes, iindex, sis, encoding);
		if (contentType != null) {
			if (contentType.indexOf("content-type") == -1) {
				System.out.println(contentType);
			} else {
				System.out.println("the head of file"
						+ readLine(bytes, iindex, sis, encoding));
			}
		}
		boolean tt = false;
		int mark = 0;

		byte[] backups = new byte[4096];
		while ((tmp = readLine(bytes, iindex, sis, encoding)) != null) {
			if (endFlag.equals(tmp)) {
				if (mark > 2) {
					fos.write(backups, 0, mark - 2);
					fos.flush();
				}
				break;
			} else {
				if (tt) {
					fos.write(backups, 0, mark);
					fos.flush();
				}
				mark = iindex[0];
				for (int i = 0; i < iindex[0]; i++) {
					backups[i] = bytes[i];
				}
				tt = true;
			}
		}
		fos.close();
		sis.close();
	}

	// 获取上传的文件名
	protected String getName(String name) {
		String rtn = null;
		if (name != null) {
			int index = name.lastIndexOf("/");
			if (index != -1) {
				rtn = name.substring(index + 1);
			} else {
				index = name.lastIndexOf("\\");
				if (index != -1) {
					rtn = name.substring(index + 1);
				} else {
					rtn = name;
				}
			}
		}
		return rtn;
	}

	// 读取每一行
	protected String readLine(byte[] bytes, int[] index,
			ServletInputStream sis, String encoding) {
		try {
			index[0] = sis.readLine(bytes, 0, bytes.length);
			if (index[0] < 0)
				return null;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		try {
			if (encoding == null) {
				return new String(bytes, 0, index[0]);
			} else {
				return new String(bytes, 0, index[0], encoding);
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}

	}
}

版权声明:本博客是博主在学习中遇到的问题,欢迎查看。

使用jsp/servlet简单实现文件上传与下载

使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马。好了,下面来简单了解如何通过使用...
  • Wetsion
  • Wetsion
  • 2016年03月14日 22:02
  • 5837

纯servlet实现文件上传和下载文件

servlet实现上传和下载文件
  • high2011
  • high2011
  • 2015年11月06日 10:24
  • 5024

Servlet实现文件上传的几种方法

1. 通过getInputStream()取得上传文件。 /** * To change this template, choose Tools | Templates * and open t...
  • zmx729618
  • zmx729618
  • 2017年01月12日 11:19
  • 2615

servlet实现文件上传

1:upload.jsp     pageEncoding="UTF-8"%>     "http://www.w3.org/TR/html4/loose.dtd"> 文件上...
  • pangqiandou
  • pangqiandou
  • 2016年12月03日 11:52
  • 551

Servlet实现文件上传 2种上传方式@ MultipartConfig

这里写链接内容Hello,大家好,很高兴来看老邢教程,今天咱们来聊一聊Servlet3.0的文件上传,3.0JAVA源生支持文件上传。 文件上传,我们需要在表单或HTTPURLConnection中...
  • u014332200
  • u014332200
  • 2017年05月24日 17:44
  • 747

Servlet实现文件上传的原理

本文转自:http://www.ibm.com/developerworks/cn/java/fileup/ Servlet 是用 Java 编写的、协议和平台都独立的服务器端组件,使用请求/响应...
  • lixiaoxiong55
  • lixiaoxiong55
  • 2016年06月15日 18:11
  • 4424

servlet+jsp实现的文件上传与下载

java文件上传与下载      通过微表单元苏设置Method = "post"      enctype = "multipart/form-data"属性,让表单提交的数据以二进制编码的方式...
  • wojiaohuangyu
  • wojiaohuangyu
  • 2016年03月21日 14:51
  • 7326

Servlet和Jsp实现原生的上传与下载文件

1.01.jsp 前台代码 String path = request.getContextPath(); String basePath = request.getScheme()+"://"+...
  • javagaorui5944
  • javagaorui5944
  • 2015年04月08日 22:22
  • 2071

JSP+servlet实现上传文件

关于在HTTP request 中通过Post方法提交文件的规范,该项目性能稳定快速,易于部署和使用.本次教程以前端jsp + 后端 servlet的方式,利用JSP上传文件,你也可以完全在jsp中实...
  • penghaozhijian
  • penghaozhijian
  • 2014年12月13日 22:23
  • 761

菜鸟学习之smartupload+servlet简单的文件上传

创建工程后首先需要导入包 jsp-api.jar jspsmartupload.jar servlet-api.jar 将这三个包放入web-inf 下的lib中 然后就可以开始编写...
  • zxtutuai
  • zxtutuai
  • 2016年04月05日 18:56
  • 2072
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Servlet实现页面上传文件(到硬盘F)
举报原因:
原因补充:

(最多只允许输入30个字)