通过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"/>
<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实现文件上传功能的更多相关文章
- jsp+servlet实现文件上传下载
相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- jsp+servlet实现文件上传
上传(上传不能使用BaseServlet) 1. 上传对表单限制 * method="post" * enctype="multipart/form-data" ...
- Spring 文件上传功能
本篇文章,我们要来做一个Spring的文件上传功能: 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: <dependency> <groupId> ...
- Spring +SpringMVC 实现文件上传功能。。。
要实现Spring +SpringMVC 实现文件上传功能. 第一步:下载 第二步: 新建一个web项目导入Spring 和SpringMVC的jar包(在MyEclipse里有自动生成spring ...
- 使用FileUpload实现Servlet的文件上传
简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...
- springmvc中使用文件上传功能
项目代码:https://github.com/PeiranZhang/springmvc-fileupload Servlet3.0之前使用文件上传功能 Servlet3.0之前需要使用common ...
- Servlet实现文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip : 点击打开链接 2) commons- ...
- Android 实现文件上传功能(upload)
文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...
- Servlet实现文件上传,可多文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...
随机推荐
- js日期转化(计算一周的日期)
之前做项目的时候遇到过一个日期转化的问题,一个日期控件和近一天,近七天和近一月的的联动效果.发现自己不会,后来就百度了一下解决了这个问题. 现在抽空又写了一个时间转化的案例(计算一周的日期),因为之前 ...
- 详解常用的gulp命令
gulp.js是一款自动化构建工具,我们经常使用它在开发过程自动执行常见的任务.gulp.js 是基于 Node.js 构建的,利用 Node.js,可以快速构建项目. 由于gulp使用基于node, ...
- stl_alloc.h分配器
五.分配器:5.1.头文件: 5.1.1.include<stl_alloc.h> //内存的分配. 5.1.2.include<stl_construct.h> //对象的构 ...
- 蓝桥杯-等额本金-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- [PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索
标题起的太大了,都是骗人的.最近使用PHP实现了简单的网盘搜索程序,并且关联了微信公众平台.用户可以通过公众号输入关键字,公众号会返回相应的网盘下载地址.就是这么一个简单的功能,类似很多的网盘搜索类网 ...
- codeforce vk cup2017
D. k-Interesting Pairs Of Integers time limit per test 2 seconds memory limit per test 256 megabytes ...
- OC分类(Category)
Category 分类 ,又称为类别.类目 概念 Category有多种翻译:分类.类别.类目(一般叫分类的多) Category式OC特有的语法,其他语言没有的语法(类似于C#语言中的"扩 ...
- 查看当前用户名称:whoami命令
没什么可讲的,就是显示当前用户名称,效果同"id -un"命令.
- hdu4681 String DP(2013多校第8场)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路: 我是胡搞过的 就是先预处理出(i,j)的正向的最大连续子串和逆向最大连续子串 然后对于A ...
- NancyFx 2.0的开源框架的使用-Stateless(二)
继续上一篇Stateless的博文,在上一篇的博文的基础上稍微加点东西 接下来右键解决方案添加新项目,一样建一个空的Web项目 然后在StatelessDemoWeb项目里面添加Views文件夹,Sc ...