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>
时间: 2024-11-22 17:38:55