📄 uploadservice.java
字号:
private String[] localFile(){
String[] fileInfo = new String[2];
File file = null;
String localPath = null;
if(isOutSideDir == true){
String path = fileConfig.getPath();
if("-1".equals(path)){
localPath = CodeFilter.htmlEncode(contextPath) + fileDir;
}
else{
localPath = getAllPath(fileConfig.getPath()) + fileDir;
}
System.out.println("localPath = " + localPath);
file = new File(getAllPath(localPath));
}else{
localPath = getAllPath(fileConfig.getPath());
file = new File(localPath);
}
String[] strFiles = file.list();
int intFileCount = 0; //文件个数
long lngSize = 0; //文件总长度
for(int i=0;i<strFiles.length;i++){
File fileTemp = new File(file+strFiles[i]);
//文件是否存在
if(fileTemp.exists()){
//判断是否是普通文件
if (fileTemp.isFile()) {
//单个文件大小
intFileCount++;
//文件大小自加
lngSize = lngSize + fileTemp.length();
}
}
}
fileInfo[0] = String.valueOf(intFileCount);
System.out.println("总的文件大小 : " + lngSize);
fileInfo[1] = String.valueOf(lngSize);
return fileInfo;
}
/**
* 对文件有效性验证
*/
private int validateFile(File file){
/**
* 单个文件大小
*/
long size = fileConfig.getSzie();
if(size == -1 ){
return -1;
}
else{
if (file.length() > size * 1024)
return 2;
}
/**
* 总大小
*/
long totalSize = fileConfig.getTotalSize();
if( totalSize == -1 ){
return -1;
}
else{
if ( (Long.valueOf(localFile()[1]).longValue() + file.length()) >
totalSize * 1024)
return 3;
}
return -1;
}
/**
* 获取输入框里的值
*/
public Iterator getInputContent(){
return list.iterator();
}
/**
* 往文件系统写入文件
*/
public int readWriteFile(HttpServletRequest request) throws
ServletException, IOException {
setCharacterEncoding(request.getCharacterEncoding());
setBoundary(request.getContentType());
/**
* 得到文件流
*/
ServletInputStream servletInputStream = request.getInputStream();
String line = null;
/**
* 获取字符串进行处理(直到读完为止)以行读取
*/
while ( (line = readLine(readByte, readCount, servletInputStream,
CharacterEncoding)) != null ) {
/**
* 查找字符串中的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("."));
logger.info("文件名前缀为 : " + fileprefix);
String fileSuffix = filename.substring(filename.indexOf(".") +
1, filename.length());
logger.info("文件名后缀文件标识为 : " + fileSuffix);
/**
* 上传的文件是否被允许(文件类型)
*/
if (validateFileSuffix(fileSuffix) == -1) {
//设置文件名(不改变情况下调用的文件名)
systemFileName = fileprefix;
/**
* 判断是否更改文件名
*/
File file = setFilePath(fileSuffix);
int validate = validateFile(file);
/**
* 文件是否达到上限
*/
int totalNum = fileConfig.getTotalNum();
/**
* totalNum = -1 代表没有任何限制
*/
if(totalNum == -1){
writeFile(file, servletInputStream,
CharacterEncoding);
setInputContent(name,dataFilePath);
if (validate != -1) {
file.delete();
return validate;
}
}
else{
if (fileConfig.getTotalNum() >
Integer.parseInt(localFile()[0]) - 1) {
//验证文件有效性
writeFile(file, servletInputStream,
CharacterEncoding);
setInputContent(name,dataFilePath);
if (validate != -1) {
file.delete();
return validate;
}
}
else {
return 4;
}
}
}
else {
return 1;
}
}
}
/**
* 处理非文件的内容
*/
int j = line.indexOf("name=\"");
if (j > 0 && i < 0) {
String inputName = line.substring(j + 6, line.length() - 3);
logger.info("inputName = " + inputName);
String inputContent = "";
//读过一空行
line = readLine(readByte, readCount, servletInputStream,
CharacterEncoding);
while ( (line = readLine(readByte, readCount,
servletInputStream,
CharacterEncoding)).indexOf(
boundary) < 0) {
//去结尾部分的/r/n符号(回车换行符)
inputContent = inputContent +
line.substring(0, line.length() - 2);
logger.info("inputContent = " + inputContent);
}
setInputContent(inputName, inputContent);
}
}
return -1;
}
/**
* 输入名和输入的值
*/
private void setInputContent(String inputName, String inputContent) {
InputField inputField = new InputField();
inputField.setInputName(inputName);
inputField.setInputContent(inputContent);
list.add(inputField);
}
/**
* 原理 : 创建输出流输出到文件
*/
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) {
//读到最后一行结束标志 strSectFlag 则退出循环
if (lineContent.indexOf(boundary) == 0 && readByte[0] == 45) {
break;
}
if (line != null) {
fileOutputStream.write(writeByte, 0, writeCount[0]);
fileOutputStream.flush();
}
//readCount[0]为实际读入的字符数
line = readLine(writeByte, writeCount, servletInputStream,
CharacterEncoding);
if (line == null ||
line.indexOf(boundary) == 0 && 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();
}
/**
* 检查本地文件夹看是否上传的文件超过了允许设置的最大文件个数
*/
//public void
/** --------------参考字符
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 + -