基于java文件上传-原始的Servlet方式

前言:干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的。刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感觉最不爽的时候,没有归属感,房租还不便宜,RT,不能好高骛远,还是脚踏实地一点一点学技术吧,终将有一日,工资会涨的。

java文件上传

传统的文件上传,不用jquery插件的话,就是用form表单提交,项目里用过uploadify,可以异步上传文件,原理我也没研究。现在说传统的form表单上传文件。

文件上传核心:

用<input type=”file”/> 来声明一个文件域。样式如 文件:_____ <浏览>.

必须使用post方式提交表单。

必须设置表单的类型为multipart/form-data.是设置这个表单传递的不是key=value值。传递的是字节码.

新建web项目:

jsp form表单:enctype(编码类型)的默认值就是 application/x-www-form-urlencoded

文件上传,必须设置enctype="multipart/form-data"

from表单:

其中的 boundary=----WebKitFormBoundary44gVxAkoSg3tk3oR 指的是文件上传的分隔符。

package com.lhy.upload;

import java.io.BufferedReader;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

*

* @author Administrator

*

*/

@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")

public class UploadServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// this.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

String contentType = req.getHeader("Content-type");

System.out.println("contentType: "+contentType);

String name = req.getParameter("name");

System.out.println(name);//null

InputStream is = req.getInputStream();

// ------WebKitFormBoundaryG0ULv7eVfQ1K2PBA

// Content-Disposition: form-data; name="image"; filename="静夜思.txt"

// Content-Type: text/plain

//

//

// ------WebKitFormBoundaryG0ULv7eVfQ1K2PBA--

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String firstLine = br.readLine();//第一行,分隔符

String fileName = br.readLine();

// Content-Disposition: form-data; name="image"; filename="jingyesi.txt"

fileName = fileName.substring(fileName.lastIndexOf("=")+2,fileName.length()-1);

br.readLine();

br.readLine();

String data = null;

//获取当前项目的运行路径

String path = getServletContext().getRealPath("/up");

PrintWriter pw = new PrintWriter(path+"/"+fileName);

while((data = br.readLine()) != null){

if(data.equals(firstLine+"--")){

break ; //读到了文件尾

}

pw.println(data);

}

pw.flush();

pw.close();

is.close();

/* FileOutputStream fos = new FileOutputStream(path+"/"+"b.doc");

// byte[] b = new byte[1024];

int len = 0;

while((len = is.read()) != -1){

fos.write(len);

}

fos.flush();

fos.close();

is.close();*/

}

}

项目里:

例子只是读取了txt,其他的二进制需要使用inputStream读取。

以上这篇基于java文件上传-原始的Servlet方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 基于java文件上传-原始的Servlet方式 的全部内容, 来源链接: utcz.com/p/213592.html

回到顶部