• 通过JSP+servlet实现文件上传功能


         在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制。

         但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的。

         通过为表单元素设置Method="post" enctype="multipart/form-data" 属性,让表单提交的数据以二进制编码的方式提交,在接受此请求的servlet中的二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。

    代码分两部分

    part1:前台页面index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <html>
      <head>
      </head>
      
      <body>
        <form action="UploadFile" method="post" enctype="multipart/form-data">
        <table>
        <tr>
        <td align="center">
                   请选择上传的文件:<input type="file" name="fileName"/>
    &nbsp;&nbsp;<input type="submit" value="上传"/>${result}
    </td> </tr> </table> </form> </body> </html>

    part2:servlet代码

    package com.file;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    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;
    
    public class UploadFile extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            doPost(request,response);
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            
            //写入缓存文件
            InputStream fileSource=request.getInputStream();
            String tempFileName="E:/tempFile";
            File tempFile=new File(tempFileName);
            FileOutputStream outputStram=new FileOutputStream(tempFile);
            byte[] b=new byte[1024];
            int n;
            while((n=fileSource.read(b))!=-1){
                outputStram.write(b,0,n);
            }        
            outputStram.close();
            fileSource.close();
            System.out.println("成功");
            
            //获取文件名
            RandomAccessFile randomFile=new RandomAccessFile(tempFile,"r");
            randomFile.readLine();
            String str=randomFile.readLine();
            int beginIndex=str.lastIndexOf("\")+1;
            int endIndex=str.lastIndexOf(""");
            String filename=str.substring(beginIndex, endIndex);
            System.out.println("filename:"+filename);
    
    //获取上传文件内容的开始位置 randomFile.seek(
    0); long startPosition=0; int i=1; while((n=randomFile.readByte())!=-1&&i<=4){ if(n==' '){ startPosition=randomFile.getFilePointer(); i++; } } startPosition=startPosition-1;
    //获取上传文件内容的结束位置
    randomFile.seek(randomFile.length());
    long endPosition=randomFile.getFilePointer(); int j=1; while(endPosition>=0&&j<=2){ endPosition--; randomFile.seek(endPosition); if(randomFile.readByte()==' '){ j++; } } endPosition=endPosition-1;
    //上传文件
    String path=getServletContext().getRealPath("/")+"MyImages"; //指定上传文件的目录
    File fileupload=new File(path); if(!fileupload.exists()){ fileupload.mkdir(); } File saveFile=new File(path,filename); RandomAccessFile RAF=new RandomAccessFile(saveFile,"rw"); randomFile.seek(startPosition); while(startPosition<endPosition){ RAF.write(randomFile.readByte()); startPosition=randomFile.getFilePointer(); } RAF.close(); randomFile.close(); tempFile.delete(); request.setAttribute("result","上传成功!"); RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp"); dispatcher.forward(request,response); } }
  • 相关阅读:
    mongo数据更新(修改器)
    mongo数据排序和分页显示
    mongodb数据操作(CRUD)
    mongodb配置和基本操作
    lua语法基本
    awk常见基本使用
    sed命令常见用法
    Python(面向对象编程4——继承顺序、封装)
    Python(面向对象3 ——实例)
    Python(面向对象编程——2 继承、派生、组合、抽象类)
  • 原文地址:https://www.cnblogs.com/JsonShare/p/4499955.html
Copyright © 2020-2023  润新知