📄 uploadaction.jsp~41~
字号:
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.io.*,java.util.*,java.text.*"%>
<%@include file="top.jsp"%>
<%!
public String codeString(String s) {
String str = s;
try {
byte b[] = str.getBytes("ISO-8859-1");
str = new String(b);
return str;
}
catch (Exception e) {
return "error";
}
}
%>
<html>
<head>
<title>FileUpload</title>
</head>
<script language="JavaScript" type="">
function check(form){
if(isEmpty(form.softwareName.value) || isEmpty(form.softwareInfor.value)){
alert("请将必填项填写完整!");
return false;
}
return true;
}
function isEmpty(str){
if(str==null || str.length==0)
return true;
else
return false;
}
</script>
<body>
<center>
<h1>
<%
request.setCharacterEncoding("gb2312");
//response.setContentType("text/html; charset=GB2312");
double softwareSize = 0;
double size;
String softwareSizeStr = "";
String turefileAbsolutePath = "";
String dir = "E:/Download";
File updir = new File(dir); //Download文件不存在的话,在E盘目录下创建一个Download文件夹
updir.mkdir(); //创建此抽象路径名指定的目录
try {
//建立临时文件,并将客户提交的全部信息存入。
//File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File tempfile = new File(dir, "TempInformation");
System.out.println("tempfileName: " + tempfile.getName());
System.out.println("tempfileAbsolutePath: " + tempfile.getAbsolutePath());
//FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream fout = new FileOutputStream(tempfile);
InputStream in = request.getInputStream();
byte b[] = new byte[1024];
int n = 0;
while ((n = in.read(b)) != -1) {
//read(byte[] b)从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。
fout.write(b, 0, n); //write(byte[] b, int off, int len)将指定字节数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
}
fout.close();
in.close();
//打开临时文件
//RandomAccessFile(File file, String mode)创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
RandomAccessFile raf = new RandomAccessFile(tempfile, "r");
String secondLine = raf.readLine();
//System.out.println(secondLine);
secondLine = raf.readLine();
//System.out.println(secondLine);
int position = secondLine.lastIndexOf('\\');
if (position != -1) {
//获得客户提交的文件名字。
String filename = secondLine.substring(position + 1, secondLine.length() - 1);
filename = new String(filename.getBytes("iso8859-1"), "gb2312");
System.out.println("filename: " + filename);
int position2 = secondLine.lastIndexOf(':');
String filePath = secondLine.substring(position2 - 1, secondLine.length() - 1);
System.out.println("filePath: " + filePath);
//获得临时文件Information的第4行结束和倒数第六行结束的位置,这两者之间的数据就是客户要提交的文件的内容。
//获取这段内容并存入另外一个文件中,另一个文件的名字与客户提交的文件名字相同。
//seek(long pos)设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
raf.seek(0);
long forthEndPosition = 0;
int forth = 1;
//readByte()从此文件读取一个有符号的八位值。
while ((n = raf.readByte()) != -1 && (forth <= 4)) {
if (n == '\n') {
forth++;
//getFilePointer()返回此文件中的当前偏移量。
forthEndPosition = raf.getFilePointer();
}
}
raf.seek(raf.length());
long endPosition = raf.getFilePointer();
long mark = endPosition;
int j = 1;
while ((mark >= 0) && (j <= 6)) {
mark--;
raf.seek(mark);
n = raf.readByte();
if (n == '\n') {
endPosition = raf.getFilePointer();
j++;
}
}
//以客户提交的文件的名字新建文件
//从临时文件中读取数据存入这个文件
File truefile = new File(dir, filename);
turefileAbsolutePath = truefile.getAbsolutePath();
String path = turefileAbsolutePath;
System.out.println("truefileAbsolutePath: " + turefileAbsolutePath);
RandomAccessFile raf2 = new RandomAccessFile(truefile, "rw");
raf.seek(forthEndPosition);
long startPoint = raf.getFilePointer();
while (startPoint < endPosition - 1) {
n = raf.readByte();
raf2.write(n);
startPoint = raf.getFilePointer();
}
raf.close();
raf2.close();
//tempfile.delete();//删除临时文件
out.print("<h2>文件上传成功,请填写相关信息!</h2>");
//获取文件大小
File ff = new File(path);
FileInputStream stream = new FileInputStream(ff);
int softwareSizeM = stream.available() / 1024 / 1024; //文件长度(单位M)
int softwareSizeK = stream.available() / 1024; //文件长度(单位K)
int softwareSizeB = stream.available(); //文件长度(单位B)
if (softwareSizeM > 0) {
size = stream.available();
size = size / (1024 * 1024);
DecimalFormat df = new DecimalFormat("##.00");
size = Double.parseDouble(df.format(size));
softwareSize = size;
softwareSizeStr = String.valueOf(softwareSize) + "M";
}
else if (softwareSizeK > 0) {
size = stream.available();
size = size / 1024;
DecimalFormat df = new DecimalFormat("##.00");
size = Double.parseDouble(df.format(size));
softwareSize = size;
softwareSizeStr = String.valueOf(softwareSize) + "KB";
}
else {
size = stream.available();
DecimalFormat df = new DecimalFormat("##.00");
size = Double.parseDouble(df.format(size));
softwareSize = size;
softwareSizeStr = String.valueOf(softwareSize) + "B";
}
System.out.println("文件大小:" + softwareSize);
}
else {
tempfile.delete(); //删除临时文件
out.print("请确认路径是否正确!");
}
}
catch (IOException e) {
out.print("error!");
}
//out.println("文件上传成功,请填写相关信息!");
//response.setHeader("refresh", "0;url='uploadMain.jsp'");
String dateNow = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
System.out.println(dateNow);
//System.out.println("truefileAbsolutePath: "+turefileAbsolutePath);
%>
</h1>
<FORM method="POST" action="softwareAdd.jsp" onsubmit="return check(this)">
<center>
<table border="1px #76aef0 solid" cellspacing="0" cellpadding="1" align=center bgColor=#99cc00 width="70%">
<tr>
<td width="100%" colspan="2" align="center">
<font size=5>软件信息</font>
</td>
</tr>
<tr>
<td width="30%" align="center">软件ID:</td>
<td width="70%">
<input type="text" size="50%" name="softwareID" disabled="disabled" value="<%=dateNow%>"/>
<input type="hidden" size="50%" name="ID" value="<%=dateNow%>"/>
</td>
</tr>
<tr>
<td width="30%" align="center">软件名称:</td>
<td width="70%">
<input type="text" size="50%" name="softwareName"/>
</td>
</tr>
<tr>
<td width="30%" align="center">软件大小:</td>
<td width="70%">
<input type="text" size="50%" name="softwareSize" disabled="disabled" value="<%=softwareSizeStr%>"/>
<input type="hidden" size="50%" name="Size" value="<%=softwareSizeStr%>"/>
</td>
</tr>
<tr>
<td width="30%" align="center">软件类型:</td>
<td width="70%">
<select name="select1" onChange="this.form.softwareType.value=this.options[this.selectedIndex].value">
<option value="系统工具">系统工具</option>
<option value="书籍教程">书籍教程</option>
<option value="图形图像">图形图像</option>
<option value="多媒体类">多媒体类</option>
</select>
<input align="middle" type=hidden name=softwareType size=10 value="系统工具">
</td>
</tr>
<tr>
<td width="30%" align="center">存储路径:</td>
<td width="70%">
<input type="text" size="50%" name="softwarePath" disabled="disabled" value="<%=turefileAbsolutePath%>"/>
<input type="hidden" size="50%" name="Path" value="<%=turefileAbsolutePath%>"/>
</td>
</tr>
<tr>
<td width="30%" align="center">软件简介:</td>
<td width="70%">
<input type="text" size="50%" name="softwareInfor"/>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<input type="submit" value="确定" class="button"/>
</center>
</td>
</tr>
</table>
</center>
</FORM>
</center>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -