首页>代码>java Servlet上传下载文件http协议原理详解>/fileSCXZ/src/com/shengke/servlet/UploadServlet.java
package com.shengke.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;

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

/**
 * Servlet implementation class UploadServlet
 */
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//从request当中获取流信息
		InputStream fileSource = request.getInputStream();
		String tempFileName = "/home/shengke/图片/tempFile";
		//tempFile指向临时文件
		File tempFile = new File(tempFileName);
		//outputStram文件输出流指向这个临时文件
		FileOutputStream outputStream = new FileOutputStream(tempFile);
		//循环读取输入流信息到输出流
		byte b[] = new byte[1024];
		int n;
		while(( n = fileSource.read(b)) != -1){
			outputStream.write(b, 0, n);
		}
		//关闭输出流、输入流
		outputStream.close();
		fileSource.close();
		
		//获取上传文件的名称,可能需要根据实际情况修改
		RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");
		System.out.println(randomFile.readLine());
		String str = randomFile.readLine();
		int beginIndex = str.lastIndexOf("filename=\"") + 10;
		int endIndex = str.lastIndexOf("\"");
		String filename = str.substring(beginIndex, endIndex);
		System.out.println("fileName:" + filename);
		
		//重新定位文件指针到文件头
		randomFile.seek(0);
		long startPosition = 0;
		int i = 1;
		//获取文件内容 开始位置,如果不等与-1且小于4
		while(( n = randomFile.readByte()) != -1 && i <=4){
			//如果读取到换行符,从新得到文件指针,这样就循环读取4行换行符
			if(n == '\n'){
				startPosition = randomFile.getFilePointer();
				i ++;
			}
		}
		startPosition = randomFile.getFilePointer() -1;
		
		//获取文件内容 结束位置
		randomFile.seek(randomFile.length());
		long endPosition = randomFile.getFilePointer();
		int j = 1;
		//从后往前读
		while(endPosition >=0 && j<=2){
			endPosition--;
			randomFile.seek(endPosition);
			if(randomFile.readByte() == '\n'){
				j++;
			}
		}
		endPosition = endPosition -1;
		
		//设置保存上传文件的路径
//		String realPath = getServletContext().getRealPath("/") + "images";
		String realPath = "/home/shengke/workspace/fileSCXZ/WebContent/images";
		System.out.println("realPath:"+realPath);
		File fileupload = new File(realPath);
		//如果路径不存在,就创建路径
		if(!fileupload.exists()){
			fileupload.mkdir();
		}
		File saveFile = new File(realPath,filename);
		RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
		//从临时文件当中读取文件内容(根据起止位置获取)
		randomFile.seek(startPosition);
		while(startPosition < endPosition){
			randomAccessFile.write(randomFile.readByte());
			startPosition = randomFile.getFilePointer();
		}
		//关闭输入输出流、删除临时文件
		randomAccessFile.close();
		randomFile.close();
		//如果想看看你上传的临时文件,可以把下面这行注释了,就可以在tempFileName路径下看到临时文件了
		tempFile.delete();
		
		request.setAttribute("result", "上传成功!");
		RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/index.jsp");
		dispatcher.forward(request, response);
	}

}
最近下载更多
3969138  LV15 2019年9月23日
小王wang  LV10 2017年5月26日
阿基师  LV5 2017年1月9日
沉默的羔羊  LV13 2016年12月31日
kasojava  LV3 2016年12月21日
猛男  LV17 2016年5月29日
303661956  LV11 2016年2月2日
归心小贩  LV13 2016年1月21日
有生之年  LV4 2015年6月24日
cpr  LV3 2015年3月18日
最近浏览更多
uni-code_0123  LV1 2023年11月11日
jameshkj  LV8 2023年5月18日
人工智能4708  LV11 2023年5月1日
ninini121  LV1 2023年3月28日
Java开发工程师_初心  LV1 2022年12月17日
微信网友_6255804817526784 2022年12月10日
暂无贡献等级
wy1179682217 2022年11月27日
暂无贡献等级
dongzhan  LV12 2021年12月15日
酒非儿  LV6 2021年12月10日
Aoifee  LV4 2021年11月11日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友