📄 uploadservice.java
字号:
if (fileTemp.isFile()) {
//单个文件大小
intFileCount++;
//文件大小自加
lngSize = lngSize + fileTemp.length();
}
}
}
fileInfo[0] = String.valueOf(intFileCount);
// System.out.println("总的文件大小 : " + lngSize + "----总文件数 : " +
// fileInfo[0]);
fileInfo[1] = String.valueOf(lngSize);
return fileInfo;
}
/**
* 对文件有效性验证
*/
private int validateFile(File file) {
/**
* 单个文件大小
*/
long fileSize = fileParam.getFileSize();
if (fileSize == 0) {
return -1;
}
else {
if (file.length() > fileSize * 1024)
return 2;
}
/**
* 总大小
*/
long totalSize = fileParam.getFileTotalSize();
if (totalSize == 0) {
return -1;
}
else {
if ((Long.valueOf(localFile()[1]).longValue() + file.length()) > totalSize * 1024)
return 3;
}
return -1;
}
/**
* 获取输入框里的值
*/
public Map getInputMap() {
return this.map;
}
/**
* 往文件系统写入文件
*/
public int readWriteFile(HttpServletRequest request)
throws ServletException, IOException {
setCharacterEncoding(request.getCharacterEncoding());
// System.out.println("contentType = " + request.getContentType());
setBoundary(request.getContentType());
// System.out.println("boundary = " + boundary);
File file = null;
/**
* 得到文件流
*/
ServletInputStream servletInputStream = request.getInputStream();
String line = "";
/**
* 获取字符串进行处理(直到读完为止)以行读取
*/
while ((line = readLine(readByte, readCount, servletInputStream,
CharacterEncoding)) != null) {
//System.out.println("headLine = " + line);
/**
* 查找字符串中的filename[filename代表是上传的字符串]
*/
int i = line.indexOf("filename=");
/**
* 获取子串 ("-1"代表没有找到)
*/
if (i > -1) {
String name = getName(line);
//取得"filename="后面对应的子串
String filename = line.substring(i + 10, line.length() - 3);
// System.out.println("文件路径 filename = " + filename);
filename = getFilename(filename);
// System.out.println("得到上传文件的文件全名 : " + filename);
if (filename != null) {
// 判断文件个数是否正确
//将这里的变量赋值给fileName(如果外部不想改文件名就直接用这个文件名)
String fileprefix = filename.substring(0, filename
.indexOf("."));
// System.out.println("文件名前缀为 : " + fileprefix);
String fileSuffix = filename.substring(filename
.indexOf(".") + 1, filename.length());
// System.out.println("文件名后缀文件标识为 : " + fileSuffix);
// 上传的文件是否被允许(文件类型)
if (validateFileSuffix(fileSuffix) == -1) {
//设置文件名(不改变情况下调用的文件名)
fileName = fileprefix;
// 判断是否更改文件名
file = setFilePath(fileSuffix);
int validate = validateFile(file);
// 文件是否达到上限
int totalNum = fileParam.getFileNum();
//System.out.print("validate = " + validate);
// System.out.println("文件总数 : "+totalNum);
// totalNum = 0 代表没有任何限制
if (totalNum == 0) {
writeFile(file, servletInputStream,
CharacterEncoding);
setInputContent(name, buildFilePath);
if (validate != -1) {
file.delete();
return validate;
}
}
else {
if (totalNum > Integer
.parseInt(localFile()[0])-1) {
//验证文件有效性
writeFile(file, servletInputStream,
CharacterEncoding);
setInputContent(name, buildFilePath);
if (validate != -1) {
file.delete();
return validate;
}
}
else {
file.delete();
return 4;
}
}
/**
*图缩放处理
*/
if(fileParam.isPic()){
JPEGHandle jpegHandle = new JPEGHandle(file,fileParam.getJpeg(),contextPath);
jpegHandle.encoderPic();
}
}
else {
return 1;
}
}
}
/**
* 处理非文件的内容
*/
int j = line.indexOf("name=\"");
if (j > 0 && i < 0) {
String inputName = line.substring(j + 6, line.length() - 3);
//System.out.println("inputName = " + inputName);
String inputContent = "";
//读过一空行
line = readLine(readByte, readCount, servletInputStream,
CharacterEncoding);
while ((line = readLine(readByte, readCount,
servletInputStream, CharacterEncoding)).indexOf(boundary) < 0) {
//去结尾部分的/r/n符号(回车换行符)
inputContent = line.substring(0, line.length() - 2);
//System.out.println("inputContent = " + inputContent);
}
setInputContent(inputName, inputContent);
}
}
return -1;
}
/**
* 输入名和输入的值
*/
private void setInputContent(String inputName, String inputContent) {
Input inputField = new Input();
inputField.setInputName(inputName);
inputField.setInputContent(inputContent);
map.put(inputName,inputContent);
}
private void writeFile(File file, ServletInputStream servletInputStream,String CharacterEncoding) throws ServletException, IOException {
String line = null;
FileOutputStream fileOutputStream = new FileOutputStream(file);
//读入下一行,该行为写入内容类型行
String lineContent = readLine(readByte, readCount, servletInputStream,
CharacterEncoding);
/**
* 读入文件类型Content-Type
*/
// 表明读入的是个文件
if (lineContent.indexOf("Content-Type") >= 0) {
// 读入一个空行
readLine(readByte, readCount, servletInputStream, CharacterEncoding);
}
//循环从输入流读入并写入文件 readCount[0]为实际写入的字符数
while ((lineContent = readLine(readByte, readCount,
servletInputStream, CharacterEncoding)) != null) {
// System.out.println("lineContent2 = " + lineContent + "---- readByte[0] = " + readByte[0]);
// 如果该行包含boundary标志,就跳出循环
if (lineContent.indexOf(boundary) == 0 && readByte[0] == 45) {
break;
}
if(line != null){
fileOutputStream.write(writeByte, 0, writeCount[0]);
fileOutputStream.flush();
}
// System.out.println("line = " + line + " writeByte[0] " + writeByte[0]);
//readCount[0]为实际读入的字符数
line = readLine(writeByte, writeCount, servletInputStream, CharacterEncoding);
// 最后一行就跳出让下面的处理
if(line == null || line.indexOf(boundary) != -1 && writeByte[0] == 45)
break;
fileOutputStream.write(readByte, 0, readCount[0]);
fileOutputStream.flush();
}
//对最后一行进行处理
if(line != null && writeByte[0] != 45 && writeCount[0] > 2) {
fileOutputStream.write(writeByte, 0, writeCount[0] - 2);
}
if(lineContent != null && readByte[0] != 45 && readCount[0] > 2){
fileOutputStream.write(readByte, 0, readCount[0] - 2);
}
fileOutputStream.close();
}
/**
* --------------参考字符 reqeustmultipart/form-data;
* boundary=---------------------------7d42fa316058e
* 44-----------------------------7d42fa316058e Content-Disposition:
* form-data; name="userPhoto"; filename="C:\Documents and
* Settings\sky\Desktop\111.txt" Content-Type: text/plain
*
* HELLO! -----------------------------7d42fa316058e Content-Disposition:
* form-data; name="photoInfo"
*
* abc -----------------------------7d42fa316058e--
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -