在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=='\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()=='\n'){
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);
}
}

通过JSP+servlet实现文件上传功能的更多相关文章

  1. jsp+servlet实现文件上传下载

    相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  2. jsp+servlet实现文件上传

    上传(上传不能使用BaseServlet) 1. 上传对表单限制 * method="post" * enctype="multipart/form-data" ...

  3. Spring 文件上传功能

    本篇文章,我们要来做一个Spring的文件上传功能: 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: <dependency> <groupId> ...

  4. Spring +SpringMVC 实现文件上传功能。。。

    要实现Spring +SpringMVC  实现文件上传功能. 第一步:下载 第二步: 新建一个web项目导入Spring 和SpringMVC的jar包(在MyEclipse里有自动生成spring ...

  5. 使用FileUpload实现Servlet的文件上传

    简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...

  6. springmvc中使用文件上传功能

    项目代码:https://github.com/PeiranZhang/springmvc-fileupload Servlet3.0之前使用文件上传功能 Servlet3.0之前需要使用common ...

  7. Servlet实现文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons- ...

  8. Android 实现文件上传功能(upload)

    文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...

  9. Servlet实现文件上传,可多文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...

随机推荐

  1. Vim常用操作-快速删除括号中内容。

    如果你和我一样,希望拥有众多工具,发挥工具最大执行效率,让工作事半功倍的话,我推荐你来使用下 Vim. 刚接触Vim 会觉得它的学习曲线非常陡峭,要记住很多命令,操作太复杂.所以这个系列的分享,不会教 ...

  2. Java集合之Map和Set

    以前就知道Set和Map是java中的两种集合,Set代表集合元素无序.不可重复的集合:Map是代表一种由多个key-value对组成的集合.然后两个集合分别有增删改查的方法.然后就迷迷糊糊地用着.突 ...

  3. C语言学习第八章

    今天开始学习字符串,学完以后最低要做到了解什么是字符串,以及字符串的一些应用方法,毕竟字符串还是很常见的. 简单的字符串"helloworld",这个字符串大家应该都很眼熟,学编程 ...

  4. 进程间通信系列 之 命名管道FIFO及其应用实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  5. SDN学习之Mininet验证OpenFlow协议版本

    最近学习如何使用mininet,但是,刚刚开始时一直无法知道如何查看OpenFlow协议的版本,通过查阅网上的资料,从SDNLAB中,学习到了如何验证,mininet自身基于OpenFlow13版本的 ...

  6. OA系统在实际应用中可发挥出的协同应用价值

    OA软件引进国内已有二十多年,早期的OA软件更多地是扮演一个"文秘"的角色,只进行一些基本的行政事务处理,创造的价值不大.但随着OA软件理论和技术的日趋成熟,OA软件摆脱了原有的局 ...

  7. PHP 无限级分类(递归)

    网上有很多,这是我自己做测试用的$arr = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name' ...

  8. vue2.0实践 —— Node + vue 实现移动官网

    简介 使用 Node + vue 对公司的官网进行了一个简单的移动端的实现. 源码 https://github.com/wx1993/node-vue-fabaocn 效果 组件 轮播图(使用 vu ...

  9. Java学习笔记——排序算法之简单排序

    男儿何不带吴钩,收取关山五十州.请君暂上凌烟阁,若个书生万户侯? --南园十三首 三种排序法: 1.冒泡法 2.简单选择法 3.直接插入法   上代码: 1.冒泡排序 public class Bub ...

  10. 华为ensp模拟某公司网络架构及配置详解

    1.先晒下架构图,二层设备省略..... 2.下面开始具体配置详解 2.1.从路由器开始配置,先用远程工具远程AR1220F-S路由,secureCRT ,putty,xshell任选其中一个均可,功 ...