Java文件上传下载

来源:互联网 发布:网络空间安全好就业吗 编辑:程序博客网 时间:2024/06/03 22:56

文件上传

1.form提交

 <form action="upload" enctype="multipart/form-data" method="post">        请选择文件:<input type="file" name="file">        <input type="submit" value="上传">    </form>

2.UploadServlet

/**步骤: 1.request读取数据流并存储为临时文件 2.解析临时文件内容     由于读取的数据流不仅仅包含文件信息。     以上传内容为 hello 的 .txt 文件为例     临时文件的内容为:         -----------------------------2185749228913        Content-Disposition: form-data; name="file"; filename="test.txt"        Content-Type: text/plain        hello        -----------------------------2185749228913-- 3.创建上传的文件*/ @WebServlet("/upload")public class UploadServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    public UploadServlet() {    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        /*-------客户端数据转换成临时文件--------------*/        //文件输入流        InputStream in = request.getInputStream();        //创建一个临时文件存储输入流数据        String tmpFileName = "E:/tempFile";        File tempFile = new File(tmpFileName);        //输出流        FileOutputStream fileOutputStream = new FileOutputStream(tempFile);        //指定一次读入的长度        byte tmp[] = new byte[1024];        int n;        //将数据输入到临时文件中        //n为实际读入的长度        while((n = in.read(tmp)) != -1){            //写入从tmp[0]到tmp[n]            fileOutputStream.write(tmp,0,n);        }        /*-------临时文件生成上传的文件--------------*/        RandomAccessFile randomAccessFile = new RandomAccessFile(tempFile, "r");        randomAccessFile.readLine();        String fileName = randomAccessFile.readLine();        //获取文件名        fileName = fileName.substring(fileName.lastIndexOf("=")+2,fileName.lastIndexOf("\""));        System.out.println(fileName);        //将文件指针重新定位到文件头        randomAccessFile.seek(0);        //起始位置        long startPosition = 0;        //获取文件内容 开头位置        int i = 1;        while((n = randomAccessFile.read()) != -1 && i<=4) {            if(n == '\n'){                startPosition = randomAccessFile.getFilePointer();                i++;            }        }        //由于read()一次之后指针已经指向了下一个下标,所以减 1          startPosition-=1;        //将文件指针重新定位到文件尾        randomAccessFile.seek(randomAccessFile.length());        //结束位置        long endPosition = randomAccessFile.getFilePointer();        int j=1;        //获取文件内容 结束位置        while(endPosition >= 0 && j<=2){            endPosition--;            randomAccessFile.seek(endPosition);            if(randomAccessFile.readByte() == '\n'){                j++;            }        }        endPosition--;        //服务器上保存文件的位置        String realPath = this.getServletContext().getRealPath("/") + "upload";        File fileupload = new File(realPath);        //新建一个文件夹        if(!fileupload.exists()){            fileupload.mkdir();        }        //建立文件        File savedFile = new File(realPath,fileName);        RandomAccessFile savedRandomAccessFile =                 new RandomAccessFile(savedFile, "rw");        randomAccessFile.seek(startPosition);        //从临时文件中写入内容        while(startPosition<endPosition){            savedRandomAccessFile.write(randomAccessFile.readByte());            startPosition++;        }        //关闭流并删除临时文件        savedRandomAccessFile.close();        randomAccessFile.close();        fileOutputStream.close();        in.close();        tempFile.delete();    }}

文件下载

1.DownloadServlet

@WebServlet("/download")public class DownloadServlet extends HttpServlet{    @Override    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{        String filePahtOnServer = getServletContext().getRealPath("/upload/test.txt");        File fileOnServer = new File(filePahtOnServer);        FileInputStream readFileStream =null;        OutputStream outputStream = null;        if(fileOnServer.exists()){                //设置相应的类型                response.setContentType("application/x-msdownload");                response.setHeader("Content-Disposition", "attachment;filename=test.txt");                readFileStream = new FileInputStream(fileOnServer);                outputStream = response.getOutputStream();                byte b[] = new byte[1024];                int n;                while((n = readFileStream.read(b)) != -1){                    outputStream.write(b);                }                outputStream.close();                readFileStream.close();                request.setAttribute("result", "文件下载成功");        }else{            request.setAttribute("result", "文件下载失败");        }        request.getRequestDispatcher("download.jsp").forward(request, response);    }
0 0
原创粉丝点击