通过JSP实现:从网页上上载一个文本文件,能显示上传成功。之后点一个按钮能在网页上显示出该文本文件的大小(字节数)

news/2024/6/17 8:18:23

1.启动tomcat

在tomcat的bin目录下找到startup.bat,双击打开。
这里写图片描述

2.用Editplus编辑代码,保存在E:\tomcat\apache-tomcat-7.0.88\webapps\ROOT该目录下。

(本次任务包含两部分代码,分别保存为uu.jsp和upload.jsp)

uu.jsp代码如下:

<%@ page contentType="text/html; charset=GB2312" %>  
<%@ page import="java.io.*"%>  
<%@ page import="java.util.*"%>  
<%@ page import="javax.servlet.*"%>  
<%@ page import="javax.servlet.http.*"%>  
<html><head><title>upFile</title></head>  
<body bgcolor="#ffffff">  
<%  
//定义上载文件的最大字节  
int MAX_SIZE = 102400 * 102400;  
// 创建根路径的保存变量  
String rootPath;  
//声明文件读入类  
DataInputStream in = null;  
FileOutputStream fileOut = null;  
//取得客户端的网络地址  
String remoteAddr = request.getRemoteAddr();  
//获得服务器的名字  
String serverName = request.getServerName();  

//取得互联网程序的绝对地址  
String realPath = request.getRealPath(serverName);  
realPath = realPath.substring(0,realPath.lastIndexOf("\\"));  
//创建文件的保存目录  
rootPath = realPath + "\\upload\\";  
//取得客户端上传的数据类型  
String contentType = request.getContentType();  
try{  
if(contentType.indexOf("multipart/form-data") >= 0){  
//读入上传的数据  
in = new DataInputStream(request.getInputStream());  
int formDataLength = request.getContentLength();  
if(formDataLength > MAX_SIZE){  
out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");  
return;  
}  
//保存上传文件的数据  
byte dataBytes[] = new byte[formDataLength];  
int byteRead = 0;  
int totalBytesRead = 0;  
//上传的数据保存在byte数组  
while(totalBytesRead < formDataLength){  
byteRead = in.read(dataBytes,totalBytesRead,formDataLength);  
totalBytesRead += byteRead;  
}  
//根据byte数组创建字符串  
String file = new String(dataBytes,"GB2312");  
//out.println(file);  
//取得上传的数据的文件名  
String saveFile = file.substring(file.indexOf("filename=\"") + 10);  
saveFile = saveFile.substring(0,saveFile.indexOf("\n"));  
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));  
int lastIndex = contentType.lastIndexOf("=");  
//取得数据的分隔字符串  
String boundary = contentType.substring(lastIndex + 1,contentType.length());  
//创建保存路径的文件名  
String fileName = rootPath + saveFile;  
//out.print(fileName);  
int pos;  
pos = file.indexOf("filename=\"");  
pos = file.indexOf("\n",pos) + 1;  
pos = file.indexOf("\n",pos) + 1;  
pos = file.indexOf("\n",pos) + 1;  
int boundaryLocation = file.indexOf(boundary,pos) - 4;  
//out.println(boundaryLocation);  
//取得文件数据的开始的位置  
int startPos = ((file.substring(0,pos)).getBytes()).length;  
//out.println(startPos);  
//取得文件数据的结束的位置  
int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;  
//out.println(endPos);  
//检查上载文件是否存在  
File checkFile = new File(fileName);  
if(checkFile.exists()){  
out.println("<p>" + saveFile + "文件已经存在.</p>");  
}  
//检查上载文件的目录是否存在  
File fileDir = new File(rootPath);  
if(!fileDir.exists()){  
fileDir.mkdirs();  
}  
//创建文件的写出类  
fileOut = new FileOutputStream(fileName);  
//保存文件的数据  
fileOut.write(dataBytes,startPos,(endPos - startPos));  
fileOut.close();  
out.println(saveFile + "文件成功上传.</p>");  
out.println("<p>文件大小为"+formDataLength/1024 + "KB.</p>"); 
}else{  
String content = request.getContentType();  
out.println("<p>上传的数据类型不是multipart/form-data</p>");  
}  
}catch(Exception ex){  
throw new ServletException(ex.getMessage());  
}  
%>  
</body>  
</html>

upload.jsp代码如下:

<%@ page contentType="text/html;charset=GB2312"%>  
<html>  
<title>文件上传</title>  
<body>  
<h2>上传文件程序应用示例</h2>  
<form action="uu.jsp" method="post" enctype="multipart/form-data">  
<%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。--%>  
<b>请选择要上传的文件</b>
<input type="file" name="upfile" size="15">  
<input type="submit" value="提交并显示文件大小为">  
</form>  
</body>  
</html>

3.在任意一个网页中输入http://localhost:8080/upload.jsp ,结果如下。

这里写图片描述


http://www.niftyadmin.cn/n/1462246.html

相关文章

破解navicat premium12

&#xff08;之前下载的navicat已过试用期&#xff0c;为了便于以后使用&#xff0c;重新下载了navicat premium12&#xff0c;网上找到了比较方便的破解方法&#xff0c;这里分享给大家&#xff09; 来源地址&#xff1a;https://blog.csdn.net/qq_21205435/article/details/7…

JSP实现一个查询单词的网页(可依据拼写、词性、难度查出所需词汇;依据释义查出对应单词;统计单词个数)

具体要求&#xff1a; 1、用JSP编写网页。实现一个查询单词的网页&#xff0c;能依据拼写、词性、难度范围等信息查出所需词汇的释义来。建立大学四级、六级词汇表放到MYSQL数据库中&#xff0c;至少包括&#xff1a;单词、词性、释义、难度&#xff08;标记是4级的还是6级还是…

Python(x,y)下载安装及基本操作

1.下载安装包 python(x,y)下载地址 http://www.softpedia.com/get/Programming/Other-Programming-Files/Python-x-y.shtml 或者ftp://ftp.ntua.gr/pub/devel/pythonxy/ 2.安装Python&#xff08;x,y&#xff09; 下载完成后双击打开进行安装&#xff0c;根据向导点击下一步…

Numpy——快速处理数据

NumPy提供了两种基本的对象&#xff1a;ndarray&#xff08;N-dimensional array object&#xff09;和 ufunc&#xff08;universal function object&#xff09;。ndarray是存储单一数据类型的多维数组&#xff0c;而ufunc则是能够对数组进行处理的函数。 1.ndrray对象 函数…

Java多线程的优先级,礼让,睡眠,中断,守护,加入

一.线程设置以及获取优先级 &#xff08;1&#xff09;线程的执行有两种调度模型 分时调度模型    所有线程轮流使用 cpu 的使用权&#xff0c;平均分配每个线程占用 cpu 的时间片。抢占式调度模型    优先级高的线程先使用 cpu &#xff0c;如果线程的优先级相同&#xf…

Java中的可重入锁ReentrantLock以及synchronized实现多人抢票

在前面的抢票中出现了多个人抢到了同一张票&#xff0c;还有负数。可以发现多线程出现了问题。这是由于同一进程的多个线程共享一块存储空间&#xff0c;在带来方便的时候&#xff0c;也带来了访问冲突问题&#xff0c;为了保证数据在方法中被访问时的正确性&#xff0c;在访问…

Scipy——数值计算库

SciPy函数库在NumPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。 1.最小二乘拟合 假设有一组实验数据(x[i], y[i])&#xff0c;我们知道它们之间的函数关系:y f(x)&#xff0c;通过…

matplotlib——绘制精美的图表

matplotlib 是python最著名的绘图库&#xff0c;它提供了一整套和matlab相似的命令API&#xff0c;十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件&#xff0c;嵌入GUI应用程序中。它的文档相当完备&#xff0c;并且 Gallery页面 中有上百幅缩略图&#xff0c;打…