Servlet图片上传

package com.servlet;



import java.io.DataInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.PrintWriter;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class FileUpLoad extends HttpServlet {



protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

//读取请求Body

byte[] body = readBody(request);

//取得所有Body内容的字符串表示

String textBody = new String(body, "ISO-8859-1");

//取得上传的文件名称

String fileName = getFileName(textBody);

//取得文件开始与结束位置

Position p = getFilePosition(request, textBody);

//输出至文件

writeTo(fileName, body, p);

}



//构造类

class Position {



int begin;

int end;



public Position(int begin, int end) {

this.begin = begin;

this.end = end;

}

}





private byte[] readBody(HttpServletRequest request) throws IOException {

//获取请求文本字节长度

int formDataLength = request.getContentLength();

//取得ServletInputStream输入流对象

DataInputStream dataStream = new DataInputStream(request.getInputStream());

byte body[] = new byte[formDataLength];

int totalBytes = 0;

while (totalBytes < formDataLength) {

int bytes = dataStream.read(body, totalBytes, formDataLength);

totalBytes += bytes;

}

return body;

}



private Position getFilePosition(HttpServletRequest request, String textBody) throws IOException {

//取得文件区段边界信息

String contentType = request.getContentType();

String boundaryText = contentType.substring(contentType.lastIndexOf("=") + 1, contentType.length());

//取得实际上传文件的气势与结束位置

int pos = textBody.indexOf("filename=\"");

pos = textBody.indexOf("\n", pos) + 1;

pos = textBody.indexOf("\n", pos) + 1;

pos = textBody.indexOf("\n", pos) + 1;

int boundaryLoc = textBody.indexOf(boundaryText, pos) - 4;

int begin = ((textBody.substring(0, pos)).getBytes("ISO-8859-1")).length;

int end = ((textBody.substring(0, boundaryLoc)).getBytes("ISO-8859-1")).length;



return new Position(begin, end);

}



private String getFileName(String requestBody) {

String fileName = requestBody.substring(requestBody.indexOf("filename=\"") + 10);

fileName = fileName.substring(0, fileName.indexOf("\n"));

fileName = fileName.substring(fileName.indexOf("\n") + 1, fileName.indexOf("\""));



return fileName;

}



private void writeTo(String fileName, byte[] body, Position p) throws IOException {

FileOutputStream fileOutputStream = new FileOutputStream("e:/workspace/" + fileName); //这里的地址改成服务器中文件夹的地址

fileOutputStream.write(body, p.begin, (p.end - p.begin));

fileOutputStream.flush();

fileOutputStream.close();

}



public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {



processRequest(request, response);

}



public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request,response);

}



}

  

 

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'FileUpload.jsp' starting page</title>

<style type="text/css">

.mylabel{

height:33px;

width: 142px;

display: block; 

overflow: hidden;

background: url(image/huang_1_btn.jpg); 

}

.file{

display:none;

}

#show{

width : 600px;

height: 50px;

background-color:#efef00;

font-size: 21px;

color:#00f;

font-weight: bold;

line-height: 50px;

text-align: center;

overflow: hidden;

}

#sub{

display : block;

width : 142px;

height: 33px;

background-color:#e34545;

margin-top:10px;

line-height: 33px;

text-decoration: none;

color : #fff;

}

</style>

<script type="text/javascript">

function show(value){

var $show = document.getElementById("show");

$show.innerHTML= value;

var image = document.getElementById("image");

image.src = value;

}

function sub(){

var fo = document.getElementById("form1");

fo.submit();

}

</script>

</head>



<body>

<center>

<form id="form1" action="http://localhost:8080/ServletFileUpload/servlet/FileUpLoad" method="POST" enctype="multipart/form-data">

<label class="mylabel">

<input type="file" name="image" class="file" onchange="show(this.value);"/>

</label>

</form>

<div id="show">



</div>

<a href="javascript:sub()" id="sub">上传文件</a>

</center>

</body>

</html>

  

你可能感兴趣的:(servlet)