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. VMWARE里安装时出现'SMBus Host Controller not enabled'

    在虚拟机上运行Linux内核版本为4.7或以上的系统都在安装过程中或在启动时会因为加载intel_powerclamp驱动而导致崩溃.解决办法:1.在启动Ubuntu的时候按住左Shift键:2.Ub ...

  2. HDU ACM 2895-Edit distance

    Edit distance Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  3. 使用Vaadin的maven archetype创建一个空Vaadin项目

    所在公司要求使用这个臭屎粑粑一样的Vaadin,我也没办法.为了更好地开展工作,对得起老板发给我的工资,就算是臭屎粑粑,也要尽力给他玩儿出花样来. Vaadin针对Eclipse和Netbeans等I ...

  4. jclass和jobject的迷惑

    [译]jclass和jobject 2012-09-18 15:02:58|  分类: Android |字号 订阅   jclass和jobject的迷惑第一次使用JNI,实例引用(jobject) ...

  5. su

    参数选项:-,-l,--login 切换用户的同时,将用户的家目录.系统环境变量等重新按切换后的用户初始化.-c 向shell传递单个命令,仅希望在某个用户下执行命令,而不用直接切换到该用户下来操作. ...

  6. bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)

    bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...

  7. CodeForces 91A Newspaper Headline

    题目链接:CodeForces - 91A  Newspaper Headline 官方题解: In this problem letters from s1 should be taken gree ...

  8. 字符串匹配KMP算法(转自阮一峰)

    转自 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 字符串匹配是计算 ...

  9. argsort

    argsort函数返回的是数组值从小到大的索引值One dimensional array:一维数组 >>> x = np.array([3, 1, 2]) >>> ...

  10. mongo安装跟启动

    mongo下载地址:http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz