JSP页面

upLoad.jsp

_________________________________

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>uoLoad</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
 <form action="MyUpLoadServlet" method="post"
  enctype="multipart/form-data">  
  请选择文件:<input id="myfile" name="myfile" type="file"
   onchange="showPreview(this)" /> <input type="submit" value="提交" />${result}
 </form>

</body>
</html>

servlet

package com.agd.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/MyUpLoadServlet")
public class MyUpLoadServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
        
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  
  //开始位置
  
  String image="image";
  copy2(request, image);
  
  
  
  //结束位置
  request.setAttribute("result", "上传成功!");
  RequestDispatcher dispatcher = request.getRequestDispatcher("success.jsp");
  dispatcher.forward(request, response);
  }

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
  doGet(request, response);
 }
   
 protected  void copy2(HttpServletRequest request,String url ) throws ServletException, IOException {
  //从request当中获取流信息
  InputStream fileSource=request.getInputStream();
  String tempFileName="E:/tempFile";
  //指向临时文件
  File tempFile=new File(tempFileName);
  //outPutStream 文件输出流指向这个临时文件
  @SuppressWarnings("resource")
  FileOutputStream outputStream=new FileOutputStream(tempFile);
  //开始读写数据
  byte[] b=new byte[1024];
  int len=0;
  while((len=fileSource.read(b))!=-1){
   outputStream.write(b, 0, len);
  }
  //关闭输出流输入流
  outputStream.close();
  fileSource.close();
  System.out.println("上传成功");
  //获取文件上传的名称
  RandomAccessFile randomFile=new RandomAccessFile(tempFile, "r");
  randomFile.readLine();//读取第一行数据
  String str=randomFile.readLine();//读取第二行数据

//临时文件第一行和最后一行都是不需要的

System.out.println(str);
  String str1=str.substring(0,str.lastIndexOf("\""));//根据最后一个引号来定位
  System.out.println(str1);
  int endIndex=str.lastIndexOf("\"");
  int beginIndex=str1.lastIndexOf("\"")+1;//beginIndex,endIndex得到文件name的初始位置
  String filename=str.substring(beginIndex,endIndex);
  filename=new String(filename.getBytes("ISO-8859-1"),"utf-8");
  System.out.println("filename"+filename);
  //重新定位文件指针到文件头
  randomFile.seek(0);
  long startPosition=0;
  int i=1;
  byte n;
  //获取文件内容,开始位置
  while((n=randomFile.readByte())!=-1&&i<=4){
  if(n=='\n'){
   startPosition=randomFile.getFilePointer();//getFilePointer()用于定位
   i++;
  } 
   
  }
  startPosition = randomFile.getFilePointer() -1;
  //获取文件内容 结束位置
  randomFile.seek(randomFile.length());
  long endPosition = randomFile.getFilePointer();
  int j = 1;
  while(endPosition >=0 && j<=2){
  endPosition--;
  randomFile.seek(endPosition);
  if(randomFile.readByte() == '\n'){
  j++;
  }
  }
  endPosition = endPosition -1;

//设置保存上传文件的路径
  String realPath =getServletContext().getRealPath("/") + url;//为文件保存的绝对路径
  System.out.println(realPath);
  
  File fileupload = new File(realPath);
  
  if(!fileupload.exists()){
  fileupload.mkdir();
  }
  File saveFile = new File(realPath,filename);
  RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
  //从临时文件当中读取文件内容(根据起止位置获取)
  randomFile.seek(startPosition);
  while(startPosition < endPosition){
  randomAccessFile.write(randomFile.readByte());
  startPosition = randomFile.getFilePointer();
  }
  System.out.println("最终版成功");
  //关闭输入输出流、删除临时文件
  randomAccessFile.close();
  randomFile.close();
  tempFile.delete(); //删除临时文件,
 } 
}

JSP + servlet 源码 实现文件的上传的更多相关文章

  1. 在IDEA中搭建Java源码学习环境并上传到GitHub上

    打开IDEA新建一个项目 创建一个最简单的Java项目即可 在项目命名填写该项目的名称,我这里写的项目名为Java_Source_Study 点击Finished,然后在项目的src目录下新建源码文件 ...

  2. [csdn markdown]使用摘记一源码高亮及图片上传和链接

    本文主要内容是体验csdn markdown的代码块高亮显示和图片链接及上传. 图片上传 上边这是标题行.仅仅须要使用一个#就能够表示.几个表示是几级标题 图片上传 本地图片上传控件 本地图片上传方式 ...

  3. jsp利用webuploader实现超大文件分片上传、断点续传

    1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. http ...

  4. 使用git上传项目解决码云文件次数上传限制(原文)

    起因:个人免费版的码云上传文件时限制: 1个小时内只能上传20个文件 解决方法:在码云创建空的项目仓库,使用git客户端下载码云的项目,把需要上传的文件复制到该项目中去,用git提交! 1.配置git ...

  5. Java实现对文件的上传下载操作

    通过servlet,实现对文件的上传功能 1.首先创建一个上传UploadHandleServlet ,代码如下: package me.gacl.web.controller; import jav ...

  6. jsp+servlet实现文件的上传和下载

    实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载: (1):上传文件是上传到服务器上,而保存到数据库是文件名 (2):上传文件是以文件转换为二进制流的形式上传的 (3): ...

  7. THINKPHP源码学习--------文件上传类

    TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php n ...

  8. php文件夹上传源码

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  9. PHP大文件分片上传断点续传实例源码

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

随机推荐

  1. c++ inline 的位置不当导致的 无法解析的外部符号

    这几天编写代码碰到 无法解析的外部符号 visual studio. 在类中 inline 修饰符应该放在类函数定义的时候而不是声明的地方 即 // test.h 头文件 class A { publ ...

  2. html 页面清浏览器缓存

    <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv=" ...

  3. Hadoop学习---CentOS中hadoop伪分布式集群安装

    注意:此次搭建是在ssh无密码配置.jdk环境已经配置好的情况下进行的 可以参考: Hadoop完全分布式安装教程 CentOS环境下搭建hadoop伪分布式集群 1.更改主机名 执行命令:vi  / ...

  4. .Net深入体验与实践第一章

    什么是委托?委托和事件是什么关系? 我的理解是委托朋友,事件是一个事情比如,中午12点要吃饭了,咱家搞忘了!还在继续嗨皮,我的朋友会叫我与他一起吃饭. 什么事反射? 可以获取.Net中的每个类型(类, ...

  5. Oracle 12c logminer测试

    首先开启归档:SQL> archive log list   Database log mode              Archive ModeAutomatic archival     ...

  6. January 15 2017 Week 3 Sunday

    A good book is the best of friends, the same today and forever. 好书乃挚友,情谊永不渝. For a coder, that is no ...

  7. 【转载】Kali-linux安装之后的简单设置

         1.更新软件源:修改sources.list文件:leafpad /etc/apt/sources.list然后选择添加以下适合自己较快的源(可自由选择,不一定要全部): #官方源deb h ...

  8. pexpect 初坑

    通过一个很坑的任务,最近认识了一个新坑: pexpect .其实基本的用法并不难,不过,我还是跟以前一样,把几个基本函数的坑蹚了个遍.有感而发,记录一下. 首先简单的介绍一下这个坑,哦不对,这个库.这 ...

  9. 闲来无事,用javascript写了一个简单的轨迹动画

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. HTML5——前端预处理技术(Less、Sass、CoffeeScript)

    一.Less 1.1.概要 Less是一种动态样式语言,Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 将 C ...