Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
chnmuseum-party
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liqin
chnmuseum-party
Commits
6f8dae25
Commit
6f8dae25
authored
Apr 23, 2021
by
liqin
💬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug fixed
parent
b5edd796
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
3 additions
and
2264 deletions
+3
-2264
chnmuseum-party.zip
chnmuseum-party.zip
+0
-0
RedisLockInterceptor.java
...ava/cn/chnmuseum/party/core/aop/RedisLockInterceptor.java
+3
-7
ActionEnter.java
src/main/java/com/baidu/ueditor/ActionEnter.java
+0
-127
ConfigManager.java
src/main/java/com/baidu/ueditor/ConfigManager.java
+0
-253
Encoder.java
src/main/java/com/baidu/ueditor/Encoder.java
+0
-24
PathFormat.java
src/main/java/com/baidu/ueditor/PathFormat.java
+0
-157
ActionMap.java
src/main/java/com/baidu/ueditor/define/ActionMap.java
+0
-42
ActionState.java
src/main/java/com/baidu/ueditor/define/ActionState.java
+0
-5
AppInfo.java
src/main/java/com/baidu/ueditor/define/AppInfo.java
+0
-80
BaseState.java
src/main/java/com/baidu/ueditor/define/BaseState.java
+0
-91
FileType.java
src/main/java/com/baidu/ueditor/define/FileType.java
+0
-31
MIMEType.java
src/main/java/com/baidu/ueditor/define/MIMEType.java
+0
-23
MultiState.java
src/main/java/com/baidu/ueditor/define/MultiState.java
+0
-112
State.java
src/main/java/com/baidu/ueditor/define/State.java
+0
-18
MultipartFile.java
src/main/java/com/baidu/ueditor/extend/MultipartFile.java
+0
-51
StandardMultipartFile.java
.../java/com/baidu/ueditor/extend/StandardMultipartFile.java
+0
-91
UEActionEnter.java
src/main/java/com/baidu/ueditor/extend/UEActionEnter.java
+0
-116
UEBase64Uploader.java
src/main/java/com/baidu/ueditor/extend/UEBase64Uploader.java
+0
-57
UEBinaryUploader.java
src/main/java/com/baidu/ueditor/extend/UEBinaryUploader.java
+0
-109
UEFileManager.java
src/main/java/com/baidu/ueditor/extend/UEFileManager.java
+0
-45
UEImageHunter.java
src/main/java/com/baidu/ueditor/extend/UEImageHunter.java
+0
-151
UEUploader.java
src/main/java/com/baidu/ueditor/extend/UEUploader.java
+0
-35
UeditorService.java
src/main/java/com/baidu/ueditor/extend/UeditorService.java
+0
-53
FileManager.java
src/main/java/com/baidu/ueditor/hunter/FileManager.java
+0
-112
ImageHunter.java
src/main/java/com/baidu/ueditor/hunter/ImageHunter.java
+0
-133
Base64Uploader.java
src/main/java/com/baidu/ueditor/upload/Base64Uploader.java
+0
-55
BinaryUploader.java
src/main/java/com/baidu/ueditor/upload/BinaryUploader.java
+0
-102
StorageManager.java
src/main/java/com/baidu/ueditor/upload/StorageManager.java
+0
-155
Uploader.java
src/main/java/com/baidu/ueditor/upload/Uploader.java
+0
-29
No files found.
chnmuseum-party.zip
deleted
100644 → 0
View file @
b5edd796
File deleted
src/main/java/cn/chnmuseum/party/core/aop/RedisLockInterceptor.java
View file @
6f8dae25
...
...
@@ -13,7 +13,6 @@ import org.springframework.stereotype.Component;
import
javax.annotation.Resource
;
import
java.util.UUID
;
import
java.util.concurrent.TimeUnit
;
/**
* Created by xulinglin on 2019/1/24
...
...
@@ -64,15 +63,12 @@ public class RedisLockInterceptor {
flag
=
redisUtil
.
lock
(
lockKey
,
currentTimeMillis
+
""
);
//执行添加了注解的方法并返回
if
(
flag
){
Object
result
=
proceedingJoinPoint
.
proceed
();
return
result
;
return
proceedingJoinPoint
.
proceed
();
}
}
while
(
required
);
}
catch
(
Exception
e
){
}
catch
(
Throwable
e
){
e
.
printStackTrace
();
}
catch
(
Throwable
throwable
)
{
throwable
.
printStackTrace
();
}
finally
{
}
finally
{
//最后在finally中删除
if
(
flag
){
redisUtil
.
del
(
lockKey
);
...
...
src/main/java/com/baidu/ueditor/ActionEnter.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
com.baidu.ueditor.define.ActionMap
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.State
;
import
com.baidu.ueditor.hunter.FileManager
;
import
com.baidu.ueditor.hunter.ImageHunter
;
import
com.baidu.ueditor.upload.Uploader
;
public
class
ActionEnter
{
private
HttpServletRequest
request
=
null
;
private
String
rootPath
=
null
;
private
String
contextPath
=
null
;
private
String
actionType
=
null
;
private
ConfigManager
configManager
=
null
;
public
ActionEnter
(
HttpServletRequest
request
,
String
rootPath
)
{
this
.
request
=
request
;
this
.
rootPath
=
rootPath
;
this
.
actionType
=
request
.
getParameter
(
"action"
);
this
.
contextPath
=
request
.
getContextPath
();
this
.
configManager
=
ConfigManager
.
getInstance
(
this
.
rootPath
,
this
.
contextPath
,
request
.
getRequestURI
().
replace
(
request
.
getContextPath
(),
""
)
);
}
public
String
exec
()
{
String
callbackName
=
this
.
request
.
getParameter
(
"callback"
);
if
(
callbackName
!=
null
)
{
if
(
!
validCallbackName
(
callbackName
)
)
{
return
new
BaseState
(
false
,
AppInfo
.
ILLEGAL
).
toJSONString
();
}
return
callbackName
+
"("
+
this
.
invoke
()+
");"
;
}
else
{
return
this
.
invoke
();
}
}
public
String
invoke
()
{
if
(
actionType
==
null
||
!
ActionMap
.
mapping
.
containsKey
(
actionType
)
)
{
return
new
BaseState
(
false
,
AppInfo
.
INVALID_ACTION
).
toJSONString
();
}
if
(
this
.
configManager
==
null
||
!
this
.
configManager
.
valid
()
)
{
return
new
BaseState
(
false
,
AppInfo
.
CONFIG_ERROR
).
toJSONString
();
}
State
state
=
null
;
int
actionCode
=
ActionMap
.
getType
(
this
.
actionType
);
Map
<
String
,
Object
>
conf
=
null
;
switch
(
actionCode
)
{
case
ActionMap
.
CONFIG
:
return
this
.
configManager
.
getAllConfig
().
toString
();
case
ActionMap
.
UPLOAD_IMAGE
:
case
ActionMap
.
UPLOAD_SCRAWL
:
case
ActionMap
.
UPLOAD_VIDEO
:
case
ActionMap
.
UPLOAD_FILE
:
conf
=
this
.
configManager
.
getConfig
(
actionCode
);
state
=
new
Uploader
(
request
,
conf
).
doExec
();
break
;
case
ActionMap
.
CATCH_IMAGE
:
conf
=
configManager
.
getConfig
(
actionCode
);
String
[]
list
=
this
.
request
.
getParameterValues
(
(
String
)
conf
.
get
(
"fieldName"
)
);
state
=
new
ImageHunter
(
conf
).
capture
(
list
);
break
;
case
ActionMap
.
LIST_IMAGE
:
case
ActionMap
.
LIST_FILE
:
conf
=
configManager
.
getConfig
(
actionCode
);
int
start
=
this
.
getStartIndex
();
state
=
new
FileManager
(
conf
).
listFile
(
start
);
break
;
}
return
state
.
toJSONString
();
}
public
int
getStartIndex
()
{
String
start
=
this
.
request
.
getParameter
(
"start"
);
try
{
return
Integer
.
parseInt
(
start
);
}
catch
(
Exception
e
)
{
return
0
;
}
}
/**
* callback参数验证
*/
public
boolean
validCallbackName
(
String
name
)
{
if
(
name
.
matches
(
"^[a-zA-Z_]+[\\w0-9_]*$"
)
)
{
return
true
;
}
return
false
;
}
}
src/main/java/com/baidu/ueditor/ConfigManager.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.io.UnsupportedEncodingException
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
com.baidu.ueditor.define.ActionMap
;
/**
* 配置管理器
*
* @author hancong03@baidu.com
*
*/
public
final
class
ConfigManager
{
private
final
String
rootPath
;
private
final
String
originalPath
;
//private final String contextPath;
private
static
final
String
configFileName
=
"config.json"
;
private
String
parentPath
=
null
;
private
JSONObject
jsonConfig
=
null
;
// 涂鸦上传filename定义
private
final
static
String
SCRAWL_FILE_NAME
=
"scrawl"
;
// 远程图片抓取filename定义
private
final
static
String
REMOTE_FILE_NAME
=
"remote"
;
/*
* 通过一个给定的路径构建一个配置管理器, 该管理器要求地址路径所在目录下必须存在config.properties文件
*/
private
ConfigManager
(
String
rootPath
,
String
contextPath
,
String
uri
)
throws
FileNotFoundException
,
IOException
{
rootPath
=
rootPath
.
replace
(
"\\"
,
"/"
);
//this.contextPath = contextPath;
this
.
rootPath
=
rootPath
;
this
.
originalPath
=
this
.
rootPath
+
uri
;
this
.
initEnv
();
}
/**
* 配置管理器构造工厂
*
* @param rootPath
* 服务器根路径
* @param contextPath
* 服务器所在项目路径
* @param uri
* 当前访问的uri
* @return 配置管理器实例或者null
*/
public
static
ConfigManager
getInstance
(
String
rootPath
,
String
contextPath
,
String
uri
)
{
try
{
return
new
ConfigManager
(
rootPath
,
contextPath
,
uri
);
}
catch
(
Exception
e
)
{
return
null
;
}
}
// 验证配置文件加载是否正确
public
boolean
valid
()
{
return
this
.
jsonConfig
!=
null
;
}
public
JSONObject
getAllConfig
()
{
return
this
.
jsonConfig
;
}
public
Map
<
String
,
Object
>
getConfig
(
int
type
)
{
Map
<
String
,
Object
>
conf
=
new
HashMap
<
String
,
Object
>();
String
savePath
=
null
;
try
{
switch
(
type
)
{
case
ActionMap
.
UPLOAD_FILE
:
conf
.
put
(
"isBase64"
,
"false"
);
conf
.
put
(
"maxSize"
,
this
.
jsonConfig
.
getLong
(
"fileMaxSize"
));
conf
.
put
(
"allowFiles"
,
this
.
getArray
(
"fileAllowFiles"
));
conf
.
put
(
"fieldName"
,
this
.
jsonConfig
.
getString
(
"fileFieldName"
));
savePath
=
this
.
jsonConfig
.
getString
(
"filePathFormat"
);
break
;
case
ActionMap
.
UPLOAD_IMAGE
:
conf
.
put
(
"isBase64"
,
"false"
);
conf
.
put
(
"maxSize"
,
this
.
jsonConfig
.
getLong
(
"imageMaxSize"
));
conf
.
put
(
"allowFiles"
,
this
.
getArray
(
"imageAllowFiles"
));
conf
.
put
(
"fieldName"
,
this
.
jsonConfig
.
getString
(
"imageFieldName"
));
savePath
=
this
.
jsonConfig
.
getString
(
"imagePathFormat"
);
break
;
case
ActionMap
.
UPLOAD_VIDEO
:
conf
.
put
(
"maxSize"
,
this
.
jsonConfig
.
getLong
(
"videoMaxSize"
));
conf
.
put
(
"allowFiles"
,
this
.
getArray
(
"videoAllowFiles"
));
conf
.
put
(
"fieldName"
,
this
.
jsonConfig
.
getString
(
"videoFieldName"
));
savePath
=
this
.
jsonConfig
.
getString
(
"videoPathFormat"
);
break
;
case
ActionMap
.
UPLOAD_SCRAWL
:
conf
.
put
(
"filename"
,
ConfigManager
.
SCRAWL_FILE_NAME
);
conf
.
put
(
"maxSize"
,
this
.
jsonConfig
.
getLong
(
"scrawlMaxSize"
));
conf
.
put
(
"fieldName"
,
this
.
jsonConfig
.
getString
(
"scrawlFieldName"
));
conf
.
put
(
"isBase64"
,
"true"
);
savePath
=
this
.
jsonConfig
.
getString
(
"scrawlPathFormat"
);
break
;
case
ActionMap
.
CATCH_IMAGE
:
conf
.
put
(
"filename"
,
ConfigManager
.
REMOTE_FILE_NAME
);
conf
.
put
(
"filter"
,
this
.
getArray
(
"catcherLocalDomain"
));
conf
.
put
(
"maxSize"
,
this
.
jsonConfig
.
getLong
(
"catcherMaxSize"
));
conf
.
put
(
"allowFiles"
,
this
.
getArray
(
"catcherAllowFiles"
));
conf
.
put
(
"fieldName"
,
this
.
jsonConfig
.
getString
(
"catcherFieldName"
)
+
"[]"
);
savePath
=
this
.
jsonConfig
.
getString
(
"catcherPathFormat"
);
break
;
case
ActionMap
.
LIST_IMAGE
:
conf
.
put
(
"allowFiles"
,
this
.
getArray
(
"imageManagerAllowFiles"
));
conf
.
put
(
"dir"
,
this
.
jsonConfig
.
getString
(
"imageManagerListPath"
));
conf
.
put
(
"count"
,
this
.
jsonConfig
.
getInt
(
"imageManagerListSize"
));
break
;
case
ActionMap
.
LIST_FILE
:
conf
.
put
(
"allowFiles"
,
this
.
getArray
(
"fileManagerAllowFiles"
));
conf
.
put
(
"dir"
,
this
.
jsonConfig
.
getString
(
"fileManagerListPath"
));
conf
.
put
(
"count"
,
this
.
jsonConfig
.
getInt
(
"fileManagerListSize"
));
break
;
}
conf
.
put
(
"savePath"
,
savePath
);
conf
.
put
(
"rootPath"
,
this
.
rootPath
);
}
catch
(
Exception
e
)
{
}
return
conf
;
}
/**
* Get rootPath from request,if not,find it from conf map.
*
* @param request
* @param conf
* @return
* @author Ternence
* @create 2015年1月31日
*/
public
static
String
getRootPath
(
HttpServletRequest
request
,
Map
<
String
,
Object
>
conf
)
{
Object
rootPath
=
request
.
getAttribute
(
"rootPath"
);
if
(
rootPath
!=
null
)
{
return
rootPath
+
""
+
File
.
separatorChar
;
}
else
{
return
conf
.
get
(
"rootPath"
)
+
""
;
}
}
private
void
initEnv
()
throws
FileNotFoundException
,
IOException
{
File
file
=
new
File
(
this
.
originalPath
);
if
(!
file
.
isAbsolute
())
{
file
=
new
File
(
file
.
getAbsolutePath
());
}
this
.
parentPath
=
file
.
getParent
();
String
configContent
=
this
.
readFile
(
this
.
getConfigPath
());
try
{
JSONObject
jsonConfig
=
new
JSONObject
(
configContent
);
this
.
jsonConfig
=
jsonConfig
;
}
catch
(
Exception
e
)
{
this
.
jsonConfig
=
null
;
}
}
private
String
getConfigPath
()
{
String
path
=
this
.
getClass
().
getResource
(
"/"
).
getPath
()
+
ConfigManager
.
configFileName
;
if
(
new
File
(
path
).
exists
())
{
return
path
;
}
else
{
return
this
.
parentPath
+
File
.
separator
+
ConfigManager
.
configFileName
;
}
}
private
String
[]
getArray
(
String
key
)
{
JSONArray
jsonArray
=
null
;
String
[]
result
=
null
;
try
{
jsonArray
=
this
.
jsonConfig
.
getJSONArray
(
key
);
result
=
new
String
[
jsonArray
.
length
()];
for
(
int
i
=
0
,
len
=
jsonArray
.
length
();
i
<
len
;
i
++)
{
result
[
i
]
=
jsonArray
.
getString
(
i
);
}
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
return
result
;
}
private
String
readFile
(
String
path
)
throws
IOException
{
StringBuilder
builder
=
new
StringBuilder
();
try
{
InputStreamReader
reader
=
new
InputStreamReader
(
new
FileInputStream
(
path
),
"UTF-8"
);
BufferedReader
bfReader
=
new
BufferedReader
(
reader
);
String
tmpContent
=
null
;
while
((
tmpContent
=
bfReader
.
readLine
())
!=
null
)
{
builder
.
append
(
tmpContent
);
}
bfReader
.
close
();
}
catch
(
UnsupportedEncodingException
e
)
{
// 忽略
}
return
this
.
filter
(
builder
.
toString
());
}
// 过滤输入字符串, 剔除多行注释以及替换掉反斜杠
private
String
filter
(
String
input
)
{
return
input
.
replaceAll
(
"/\\*[\\s\\S]*?\\*/"
,
""
);
}
}
src/main/java/com/baidu/ueditor/Encoder.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
;
public
class
Encoder
{
public
static
String
toUnicode
(
String
input
)
{
StringBuilder
builder
=
new
StringBuilder
();
char
[]
chars
=
input
.
toCharArray
();
for
(
char
ch
:
chars
)
{
if
(
ch
<
256
)
{
builder
.
append
(
ch
);
}
else
{
builder
.
append
(
"\\u"
+
Integer
.
toHexString
(
ch
&
0xffff
)
);
}
}
return
builder
.
toString
();
}
}
\ No newline at end of file
src/main/java/com/baidu/ueditor/PathFormat.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
PathFormat
{
private
static
final
String
TIME
=
"time"
;
private
static
final
String
FULL_YEAR
=
"yyyy"
;
private
static
final
String
YEAR
=
"yy"
;
private
static
final
String
MONTH
=
"mm"
;
private
static
final
String
DAY
=
"dd"
;
private
static
final
String
HOUR
=
"hh"
;
private
static
final
String
MINUTE
=
"ii"
;
private
static
final
String
SECOND
=
"ss"
;
private
static
final
String
RAND
=
"rand"
;
private
static
Date
currentDate
=
null
;
public
static
String
parse
(
String
input
)
{
Pattern
pattern
=
Pattern
.
compile
(
"\\{([^\\}]+)\\}"
,
Pattern
.
CASE_INSENSITIVE
);
Matcher
matcher
=
pattern
.
matcher
(
input
);
PathFormat
.
currentDate
=
new
Date
();
StringBuffer
sb
=
new
StringBuffer
();
while
(
matcher
.
find
()
)
{
matcher
.
appendReplacement
(
sb
,
PathFormat
.
getString
(
matcher
.
group
(
1
)
)
);
}
matcher
.
appendTail
(
sb
);
return
sb
.
toString
();
}
/**
* 格式化路径, 把windows路径替换成标准路径
* @param input 待格式化的路径
* @return 格式化后的路径
*/
public
static
String
format
(
String
input
)
{
return
input
.
replace
(
"\\"
,
"/"
);
}
public
static
String
parse
(
String
input
,
String
filename
)
{
Pattern
pattern
=
Pattern
.
compile
(
"\\{([^\\}]+)\\}"
,
Pattern
.
CASE_INSENSITIVE
);
Matcher
matcher
=
pattern
.
matcher
(
input
);
String
matchStr
=
null
;
PathFormat
.
currentDate
=
new
Date
();
StringBuffer
sb
=
new
StringBuffer
();
while
(
matcher
.
find
()
)
{
matchStr
=
matcher
.
group
(
1
);
if
(
matchStr
.
indexOf
(
"filename"
)
!=
-
1
)
{
filename
=
filename
.
replace
(
"$"
,
"\\$"
).
replaceAll
(
"[\\/:*?\"<>|]"
,
""
);
matcher
.
appendReplacement
(
sb
,
filename
);
}
else
{
matcher
.
appendReplacement
(
sb
,
PathFormat
.
getString
(
matchStr
)
);
}
}
matcher
.
appendTail
(
sb
);
return
sb
.
toString
();
}
private
static
String
getString
(
String
pattern
)
{
pattern
=
pattern
.
toLowerCase
();
// time 处理
if
(
pattern
.
indexOf
(
PathFormat
.
TIME
)
!=
-
1
)
{
return
PathFormat
.
getTimestamp
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
FULL_YEAR
)
!=
-
1
)
{
return
PathFormat
.
getFullYear
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
YEAR
)
!=
-
1
)
{
return
PathFormat
.
getYear
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
MONTH
)
!=
-
1
)
{
return
PathFormat
.
getMonth
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
DAY
)
!=
-
1
)
{
return
PathFormat
.
getDay
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
HOUR
)
!=
-
1
)
{
return
PathFormat
.
getHour
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
MINUTE
)
!=
-
1
)
{
return
PathFormat
.
getMinute
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
SECOND
)
!=
-
1
)
{
return
PathFormat
.
getSecond
();
}
else
if
(
pattern
.
indexOf
(
PathFormat
.
RAND
)
!=
-
1
)
{
return
PathFormat
.
getRandom
(
pattern
);
}
return
pattern
;
}
private
static
String
getTimestamp
()
{
return
System
.
currentTimeMillis
()
+
""
;
}
private
static
String
getFullYear
()
{
return
new
SimpleDateFormat
(
"yyyy"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getYear
()
{
return
new
SimpleDateFormat
(
"yy"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getMonth
()
{
return
new
SimpleDateFormat
(
"MM"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getDay
()
{
return
new
SimpleDateFormat
(
"dd"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getHour
()
{
return
new
SimpleDateFormat
(
"HH"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getMinute
()
{
return
new
SimpleDateFormat
(
"mm"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getSecond
()
{
return
new
SimpleDateFormat
(
"ss"
).
format
(
PathFormat
.
currentDate
);
}
private
static
String
getRandom
(
String
pattern
)
{
int
length
=
0
;
pattern
=
pattern
.
split
(
":"
)[
1
].
trim
();
length
=
Integer
.
parseInt
(
pattern
);
return
(
Math
.
random
()
+
""
).
replace
(
"."
,
""
).
substring
(
0
,
length
);
}
public
static
void
main
(
String
[]
args
)
{
// TODO Auto-generated method stub
}
}
src/main/java/com/baidu/ueditor/define/ActionMap.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
import
java.util.Map
;
import
java.util.HashMap
;
/**
* 定义请求action类型
* @author hancong03@baidu.com
*
*/
@SuppressWarnings
(
"serial"
)
public
final
class
ActionMap
{
public
static
final
Map
<
String
,
Integer
>
mapping
;
// 获取配置请求
public
static
final
int
CONFIG
=
0
;
public
static
final
int
UPLOAD_IMAGE
=
1
;
public
static
final
int
UPLOAD_SCRAWL
=
2
;
public
static
final
int
UPLOAD_VIDEO
=
3
;
public
static
final
int
UPLOAD_FILE
=
4
;
public
static
final
int
CATCH_IMAGE
=
5
;
public
static
final
int
LIST_FILE
=
6
;
public
static
final
int
LIST_IMAGE
=
7
;
static
{
mapping
=
new
HashMap
<
String
,
Integer
>(){{
put
(
"config"
,
ActionMap
.
CONFIG
);
put
(
"uploadimage"
,
ActionMap
.
UPLOAD_IMAGE
);
put
(
"uploadscrawl"
,
ActionMap
.
UPLOAD_SCRAWL
);
put
(
"uploadvideo"
,
ActionMap
.
UPLOAD_VIDEO
);
put
(
"uploadfile"
,
ActionMap
.
UPLOAD_FILE
);
put
(
"catchimage"
,
ActionMap
.
CATCH_IMAGE
);
put
(
"listfile"
,
ActionMap
.
LIST_FILE
);
put
(
"listimage"
,
ActionMap
.
LIST_IMAGE
);
}};
}
public
static
int
getType
(
String
key
)
{
return
ActionMap
.
mapping
.
get
(
key
);
}
}
src/main/java/com/baidu/ueditor/define/ActionState.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
public
enum
ActionState
{
UNKNOW_ERROR
}
src/main/java/com/baidu/ueditor/define/AppInfo.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
import
java.util.HashMap
;
import
java.util.Map
;
public
final
class
AppInfo
{
public
static
final
int
SUCCESS
=
0
;
public
static
final
int
MAX_SIZE
=
1
;
public
static
final
int
PERMISSION_DENIED
=
2
;
public
static
final
int
FAILED_CREATE_FILE
=
3
;
public
static
final
int
IO_ERROR
=
4
;
public
static
final
int
NOT_MULTIPART_CONTENT
=
5
;
public
static
final
int
PARSE_REQUEST_ERROR
=
6
;
public
static
final
int
NOTFOUND_UPLOAD_DATA
=
7
;
public
static
final
int
NOT_ALLOW_FILE_TYPE
=
8
;
public
static
final
int
INVALID_ACTION
=
101
;
public
static
final
int
CONFIG_ERROR
=
102
;
public
static
final
int
PREVENT_HOST
=
201
;
public
static
final
int
CONNECTION_ERROR
=
202
;
public
static
final
int
REMOTE_FAIL
=
203
;
public
static
final
int
NOT_DIRECTORY
=
301
;
public
static
final
int
NOT_EXIST
=
302
;
public
static
final
int
ILLEGAL
=
401
;
public
static
Map
<
Integer
,
String
>
info
=
new
HashMap
<
Integer
,
String
>()
{
private
static
final
long
serialVersionUID
=
1L
;
{
put
(
AppInfo
.
SUCCESS
,
"SUCCESS"
);
// 无效的Action
put
(
AppInfo
.
INVALID_ACTION
,
"\u65E0\u6548\u7684Action"
);
// 配置文件初始化失败
put
(
AppInfo
.
CONFIG_ERROR
,
"\u914D\u7F6E\u6587\u4EF6\u521D\u59CB\u5316\u5931\u8D25"
);
// 抓取远程图片失败
put
(
AppInfo
.
REMOTE_FAIL
,
"\u6293\u53D6\u8FDC\u7A0B\u56FE\u7247\u5931\u8D25"
);
// 被阻止的远程主机
put
(
AppInfo
.
PREVENT_HOST
,
"\u88AB\u963B\u6B62\u7684\u8FDC\u7A0B\u4E3B\u673A"
);
// 远程连接出错
put
(
AppInfo
.
CONNECTION_ERROR
,
"\u8FDC\u7A0B\u8FDE\u63A5\u51FA\u9519"
);
// "文件大小超出限制"
put
(
AppInfo
.
MAX_SIZE
,
"\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u9650\u5236"
);
// 权限不足, 多指写权限
put
(
AppInfo
.
PERMISSION_DENIED
,
"\u6743\u9650\u4E0D\u8DB3"
);
// 创建文件失败
put
(
AppInfo
.
FAILED_CREATE_FILE
,
"\u521B\u5EFA\u6587\u4EF6\u5931\u8D25"
);
// IO错误
put
(
AppInfo
.
IO_ERROR
,
"IO\u9519\u8BEF"
);
// 上传表单不是multipart/form-data类型
put
(
AppInfo
.
NOT_MULTIPART_CONTENT
,
"\u4E0A\u4F20\u8868\u5355\u4E0D\u662Fmultipart/form-data\u7C7B\u578B"
);
// 解析上传表单错误
put
(
AppInfo
.
PARSE_REQUEST_ERROR
,
"\u89E3\u6790\u4E0A\u4F20\u8868\u5355\u9519\u8BEF"
);
// 未找到上传数据
put
(
AppInfo
.
NOTFOUND_UPLOAD_DATA
,
"\u672A\u627E\u5230\u4E0A\u4F20\u6570\u636E"
);
// 不允许的文件类型
put
(
AppInfo
.
NOT_ALLOW_FILE_TYPE
,
"\u4E0D\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B"
);
// 指定路径不是目录
put
(
AppInfo
.
NOT_DIRECTORY
,
"\u6307\u5B9A\u8DEF\u5F84\u4E0D\u662F\u76EE\u5F55"
);
// 指定路径并不存在
put
(
AppInfo
.
NOT_EXIST
,
"\u6307\u5B9A\u8DEF\u5F84\u5E76\u4E0D\u5B58\u5728"
);
// callback参数名不合法
put
(
AppInfo
.
ILLEGAL
,
"Callback\u53C2\u6570\u540D\u4E0D\u5408\u6CD5"
);
}
};
public
static
String
getStateInfo
(
int
key
)
{
return
AppInfo
.
info
.
get
(
key
);
}
}
src/main/java/com/baidu/ueditor/define/BaseState.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
import
com.baidu.ueditor.Encoder
;
public
class
BaseState
implements
State
{
private
boolean
state
=
false
;
private
String
info
=
null
;
private
Map
<
String
,
String
>
infoMap
=
new
HashMap
<
String
,
String
>();
public
BaseState
()
{
this
.
state
=
true
;
}
public
BaseState
(
boolean
state
)
{
this
.
setState
(
state
);
}
public
BaseState
(
boolean
state
,
String
info
)
{
this
.
setState
(
state
);
this
.
info
=
info
;
}
public
BaseState
(
boolean
state
,
int
infoCode
)
{
this
.
setState
(
state
);
this
.
info
=
AppInfo
.
getStateInfo
(
infoCode
);
}
@Override
public
boolean
isSuccess
()
{
return
this
.
state
;
}
public
void
setState
(
boolean
state
)
{
this
.
state
=
state
;
}
public
void
setInfo
(
String
info
)
{
this
.
info
=
info
;
}
public
void
setInfo
(
int
infoCode
)
{
this
.
info
=
AppInfo
.
getStateInfo
(
infoCode
);
}
@Override
public
String
toJSONString
()
{
return
this
.
toString
();
}
public
String
toString
()
{
String
key
=
null
;
String
stateVal
=
this
.
isSuccess
()
?
AppInfo
.
getStateInfo
(
AppInfo
.
SUCCESS
)
:
this
.
info
;
StringBuilder
builder
=
new
StringBuilder
();
builder
.
append
(
"{\"state\": \""
+
stateVal
+
"\""
);
Iterator
<
String
>
iterator
=
this
.
infoMap
.
keySet
().
iterator
();
while
(
iterator
.
hasNext
()
)
{
key
=
iterator
.
next
();
builder
.
append
(
",\""
+
key
+
"\": \""
+
this
.
infoMap
.
get
(
key
)
+
"\""
);
}
builder
.
append
(
"}"
);
return
Encoder
.
toUnicode
(
builder
.
toString
()
);
}
@Override
public
void
putInfo
(
String
name
,
String
val
)
{
this
.
infoMap
.
put
(
name
,
val
);
}
@Override
public
void
putInfo
(
String
name
,
long
val
)
{
this
.
putInfo
(
name
,
val
+
""
);
}
}
src/main/java/com/baidu/ueditor/define/FileType.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
FileType
{
public
static
final
String
JPG
=
"JPG"
;
private
static
final
Map
<
String
,
String
>
types
=
new
HashMap
<
String
,
String
>()
{
private
static
final
long
serialVersionUID
=
1L
;
{
put
(
FileType
.
JPG
,
".jpg"
);
}
};
public
static
String
getSuffix
(
String
key
)
{
return
FileType
.
types
.
get
(
key
);
}
/**
* 根据给定的文件名,获取其后缀信息
*
* @param filename
* @return
*/
public
static
String
getSuffixByFilename
(
String
filename
)
{
return
filename
.
substring
(
filename
.
lastIndexOf
(
"."
)).
toLowerCase
();
}
}
src/main/java/com/baidu/ueditor/define/MIMEType.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
MIMEType
{
public
static
final
Map
<
String
,
String
>
types
=
new
HashMap
<
String
,
String
>()
{
private
static
final
long
serialVersionUID
=
1L
;
{
put
(
"image/gif"
,
".gif"
);
put
(
"image/jpeg"
,
".jpg"
);
put
(
"image/jpg"
,
".jpg"
);
put
(
"image/png"
,
".png"
);
put
(
"image/bmp"
,
".bmp"
);
}
};
public
static
String
getSuffix
(
String
mime
)
{
return
MIMEType
.
types
.
get
(
mime
);
}
}
src/main/java/com/baidu/ueditor/define/MultiState.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
com.baidu.ueditor.Encoder
;
/**
* 多状态集合状态
* 其包含了多个状态的集合, 其本身自己也是一个状态
* @author hancong03@baidu.com
*
*/
public
class
MultiState
implements
State
{
private
boolean
state
=
false
;
private
String
info
=
null
;
private
Map
<
String
,
Long
>
intMap
=
new
HashMap
<
String
,
Long
>();
private
Map
<
String
,
String
>
infoMap
=
new
HashMap
<
String
,
String
>();
private
List
<
String
>
stateList
=
new
ArrayList
<
String
>();
public
MultiState
(
boolean
state
)
{
this
.
state
=
state
;
}
public
MultiState
(
boolean
state
,
String
info
)
{
this
.
state
=
state
;
this
.
info
=
info
;
}
public
MultiState
(
boolean
state
,
int
infoKey
)
{
this
.
state
=
state
;
this
.
info
=
AppInfo
.
getStateInfo
(
infoKey
);
}
@Override
public
boolean
isSuccess
()
{
return
this
.
state
;
}
public
void
addState
(
State
state
)
{
stateList
.
add
(
state
.
toJSONString
()
);
}
/**
* 该方法调用无效果
*/
@Override
public
void
putInfo
(
String
name
,
String
val
)
{
this
.
infoMap
.
put
(
name
,
val
);
}
@Override
public
String
toJSONString
()
{
String
stateVal
=
this
.
isSuccess
()
?
AppInfo
.
getStateInfo
(
AppInfo
.
SUCCESS
)
:
this
.
info
;
StringBuilder
builder
=
new
StringBuilder
();
builder
.
append
(
"{\"state\": \""
+
stateVal
+
"\""
);
// 数字转换
Iterator
<
String
>
iterator
=
this
.
intMap
.
keySet
().
iterator
();
while
(
iterator
.
hasNext
()
)
{
stateVal
=
iterator
.
next
();
builder
.
append
(
",\""
+
stateVal
+
"\": "
+
this
.
intMap
.
get
(
stateVal
)
);
}
iterator
=
this
.
infoMap
.
keySet
().
iterator
();
while
(
iterator
.
hasNext
()
)
{
stateVal
=
iterator
.
next
();
builder
.
append
(
",\""
+
stateVal
+
"\": \""
+
this
.
infoMap
.
get
(
stateVal
)
+
"\""
);
}
builder
.
append
(
", list: ["
);
iterator
=
this
.
stateList
.
iterator
();
while
(
iterator
.
hasNext
()
)
{
builder
.
append
(
iterator
.
next
()
+
","
);
}
if
(
this
.
stateList
.
size
()
>
0
)
{
builder
.
deleteCharAt
(
builder
.
length
()
-
1
);
}
builder
.
append
(
" ]}"
);
return
Encoder
.
toUnicode
(
builder
.
toString
()
);
}
@Override
public
void
putInfo
(
String
name
,
long
val
)
{
this
.
intMap
.
put
(
name
,
val
);
}
}
src/main/java/com/baidu/ueditor/define/State.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
define
;
/**
* 处理状态接口
* @author hancong03@baidu.com
*
*/
public
interface
State
{
public
boolean
isSuccess
();
public
void
putInfo
(
String
name
,
String
val
);
public
void
putInfo
(
String
name
,
long
val
);
public
String
toJSONString
();
}
src/main/java/com/baidu/ueditor/extend/MultipartFile.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
java.io.IOException
;
import
java.io.InputStream
;
public
interface
MultipartFile
{
/**
* Return the name of the parameter in the multipart form.
* @return the name of the parameter (never {@code null} or empty)
*/
String
getName
();
/**
* Return the original filename in the client's filesystem.
* <p>This may contain path information depending on the browser used,
* but it typically will not with any other than Opera.
* @return the original filename, or the empty String if no file
* has been chosen in the multipart form, or {@code null}
* if not defined or not available
*/
String
getOriginalFilename
();
/**
* Return whether the uploaded file is empty, that is, either no file has
* been chosen in the multipart form or the chosen file has no content.
*/
boolean
isEmpty
();
/**
* Return the size of the file in bytes.
* @return the size of the file, or 0 if empty
*/
long
getSize
();
/**
* Return the contents of the file as an array of bytes.
* @return the contents of the file as bytes, or an empty byte array if empty
* @throws IOException in case of access errors (if the temporary store fails)
*/
byte
[]
getBytes
()
throws
IOException
;
/**
* Return an InputStream to read the contents of the file from.
* The user is responsible for closing the stream.
* @return the contents of the file as stream, or an empty stream if empty
* @throws IOException in case of access errors (if the temporary store fails)
*/
InputStream
getInputStream
()
throws
IOException
;
}
src/main/java/com/baidu/ueditor/extend/StandardMultipartFile.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
public
class
StandardMultipartFile
implements
MultipartFile
{
public
static
final
int
BUFFER_SIZE
=
4096
;
private
final
String
fieldName
;
// 参数名
private
final
InputStream
inputStream
;
private
final
String
filename
;
private
final
long
size
;
public
StandardMultipartFile
(
String
fieldName
,
InputStream
inputStream
,
String
filename
,
long
size
)
{
this
.
fieldName
=
fieldName
;
this
.
inputStream
=
inputStream
;
this
.
filename
=
filename
;
this
.
size
=
size
;
}
@Override
public
String
getName
()
{
return
this
.
fieldName
;
}
@Override
public
String
getOriginalFilename
()
{
if
(
filename
==
null
)
{
// Should never happen.
return
""
;
}
// check for Unix-style path
int
pos
=
filename
.
lastIndexOf
(
"/"
);
if
(
pos
==
-
1
)
{
// check for Windows-style path
pos
=
filename
.
lastIndexOf
(
"\\"
);
}
if
(
pos
!=
-
1
)
{
// any sort of path separator found
return
filename
.
substring
(
pos
+
1
);
}
else
{
// plain name
return
filename
;
}
}
@Override
public
boolean
isEmpty
()
{
return
(
this
.
size
==
0
);
}
@Override
public
long
getSize
()
{
return
this
.
size
;
}
@Override
public
byte
[]
getBytes
()
throws
IOException
{
ByteArrayOutputStream
out
=
new
ByteArrayOutputStream
(
BUFFER_SIZE
);
InputStream
in
=
this
.
inputStream
;
try
{
// int byteCount = 0;
byte
[]
buffer
=
new
byte
[
BUFFER_SIZE
];
int
bytesRead
=
-
1
;
while
((
bytesRead
=
in
.
read
(
buffer
))
!=
-
1
)
{
out
.
write
(
buffer
,
0
,
bytesRead
);
// byteCount += bytesRead;
}
out
.
flush
();
}
finally
{
try
{
in
.
close
();
}
catch
(
IOException
ex
)
{
}
try
{
out
.
close
();
}
catch
(
IOException
ex
)
{
}
}
return
out
.
toByteArray
();
}
@Override
public
InputStream
getInputStream
()
throws
IOException
{
return
(
this
.
inputStream
!=
null
?
this
.
inputStream
:
new
ByteArrayInputStream
(
new
byte
[
0
]));
}
}
src/main/java/com/baidu/ueditor/extend/UEActionEnter.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
com.baidu.ueditor.ActionEnter
;
import
com.baidu.ueditor.ConfigManager
;
import
com.baidu.ueditor.define.ActionMap
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.State
;
public
class
UEActionEnter
extends
ActionEnter
{
private
HttpServletRequest
request
=
null
;
private
String
rootPath
=
null
;
private
String
contextPath
=
null
;
private
String
actionType
=
null
;
private
ConfigManager
configManager
=
null
;
private
UeditorService
ueditorService
=
null
;
public
UEActionEnter
(
HttpServletRequest
request
,
String
rootPath
,
UeditorService
ueditorService
)
{
super
(
request
,
rootPath
);
this
.
request
=
request
;
this
.
rootPath
=
rootPath
;
this
.
actionType
=
request
.
getParameter
(
"action"
);
this
.
contextPath
=
request
.
getContextPath
();
this
.
configManager
=
ConfigManager
.
getInstance
(
this
.
rootPath
,
this
.
contextPath
,
request
.
getRequestURI
().
replace
(
request
.
getContextPath
(),
""
));
this
.
ueditorService
=
ueditorService
;
}
public
String
exec
()
{
return
super
.
exec
();
}
public
String
invoke
()
{
if
(
actionType
==
null
||
!
ActionMap
.
mapping
.
containsKey
(
actionType
))
{
return
new
BaseState
(
false
,
AppInfo
.
INVALID_ACTION
).
toJSONString
();
}
if
(
this
.
configManager
==
null
||
!
this
.
configManager
.
valid
())
{
return
new
BaseState
(
false
,
AppInfo
.
CONFIG_ERROR
).
toJSONString
();
}
State
state
=
null
;
int
actionCode
=
ActionMap
.
getType
(
this
.
actionType
);
Map
<
String
,
Object
>
conf
=
null
;
switch
(
actionCode
)
{
case
ActionMap
.
CONFIG
:
return
this
.
configManager
.
getAllConfig
().
toString
();
case
ActionMap
.
UPLOAD_IMAGE
:
case
ActionMap
.
UPLOAD_SCRAWL
:
case
ActionMap
.
UPLOAD_VIDEO
:
case
ActionMap
.
UPLOAD_FILE
:
conf
=
this
.
configManager
.
getConfig
(
actionCode
);
state
=
new
UEUploader
(
request
,
conf
,
this
.
ueditorService
).
doExec
();
break
;
case
ActionMap
.
CATCH_IMAGE
:
conf
=
configManager
.
getConfig
(
actionCode
);
String
[]
list
=
this
.
request
.
getParameterValues
((
String
)
conf
.
get
(
"fieldName"
));
state
=
new
UEImageHunter
(
conf
,
this
.
ueditorService
).
capture
(
list
);
break
;
case
ActionMap
.
LIST_IMAGE
:
case
ActionMap
.
LIST_FILE
:
conf
=
configManager
.
getConfig
(
actionCode
);
int
start
=
this
.
getStartIndex
();
state
=
new
UEFileManager
(
conf
,
this
.
ueditorService
).
listFile
(
start
);
break
;
}
return
state
.
toJSONString
();
}
public
int
getStartIndex
()
{
String
start
=
this
.
request
.
getParameter
(
"start"
);
try
{
return
Integer
.
parseInt
(
start
);
}
catch
(
Exception
e
)
{
return
0
;
}
}
/**
* callback参数验证
*/
public
boolean
validCallbackName
(
String
name
)
{
if
(
name
.
matches
(
"^[a-zA-Z_]+[\\w0-9_]*$"
))
{
return
true
;
}
return
false
;
}
}
src/main/java/com/baidu/ueditor/extend/UEBase64Uploader.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.FileType
;
import
com.baidu.ueditor.define.State
;
import
org.json.JSONObject
;
import
java.util.Base64
;
import
java.util.Map
;
public
final
class
UEBase64Uploader
{
public
static
State
save
(
String
fileName
,
Map
<
String
,
Object
>
conf
,
UeditorService
ueditorService
)
{
// String filedName = (String) conf.get("fieldName");
// String fileName = request.getParameter(filedName);
byte
[]
data
=
decode
(
fileName
);
long
maxSize
=
(
Long
)
conf
.
get
(
"maxSize"
);
if
(!
validSize
(
data
,
maxSize
))
{
return
new
BaseState
(
false
,
AppInfo
.
MAX_SIZE
);
}
String
suffix
=
FileType
.
getSuffix
(
"JPG"
);
// String savePath = PathFormat.parse((String) conf.get("savePath"), (String) conf.get("filename"));
State
storageState
=
ueditorService
.
saveBinaryFile
(
data
,
conf
.
get
(
"filename"
)
+
suffix
);
//savePath = savePath + suffix;
//String rootPath = ConfigManager.getRootPath(request,conf);
//String physicalPath = rootPath + savePath;
//State storageState = StorageManager.saveBinaryFile(data, physicalPath);
if
(
storageState
.
isSuccess
())
{
try
{
JSONObject
jsonObj
=
new
JSONObject
(
storageState
.
toJSONString
());
//storageState.putInfo("url", PathFormat.format(savePath));
storageState
.
putInfo
(
"url"
,
jsonObj
.
getString
(
"url"
));
storageState
.
putInfo
(
"type"
,
suffix
);
storageState
.
putInfo
(
"original"
,
""
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
storageState
;
}
private
static
byte
[]
decode
(
String
content
)
{
return
Base64
.
getDecoder
().
decode
(
content
);
}
private
static
boolean
validSize
(
byte
[]
data
,
long
length
)
{
return
data
.
length
<=
length
;
}
}
\ No newline at end of file
src/main/java/com/baidu/ueditor/extend/UEBinaryUploader.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
org.apache.commons.fileupload.disk.DiskFileItemFactory
;
import
org.apache.commons.fileupload.servlet.ServletFileUpload
;
import
org.json.JSONObject
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.FileType
;
import
com.baidu.ueditor.define.State
;
public
class
UEBinaryUploader
{
public
static
final
State
save
(
HttpServletRequest
request
,
Map
<
String
,
Object
>
conf
,
UeditorService
ueditorService
)
{
// FileItemStream fileStream = null;
boolean
isAjaxUpload
=
request
.
getHeader
(
"X_Requested_With"
)
!=
null
;
if
(!
ServletFileUpload
.
isMultipartContent
(
request
))
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_MULTIPART_CONTENT
);
}
ServletFileUpload
upload
=
new
ServletFileUpload
(
new
DiskFileItemFactory
());
if
(
isAjaxUpload
)
{
upload
.
setHeaderEncoding
(
"UTF-8"
);
}
try
{
/////////////////////////////////////////////////////////////////////////////////
String
filedName
=
(
String
)
conf
.
get
(
"fieldName"
);
MultipartFile
multipartFile
=
ueditorService
.
getMultipartFile
(
filedName
,
request
);
if
(
multipartFile
==
null
)
{
return
new
BaseState
(
false
,
AppInfo
.
NOTFOUND_UPLOAD_DATA
);
}
/////////////////////////////////////////////////////////////////////////////////
/*
* FileItemIterator iterator = upload.getItemIterator(request);
*
* while (iterator.hasNext()) { fileStream = iterator.next();
*
* if (!fileStream.isFormField()) break; fileStream = null; }
*
* if (fileStream == null) { return new BaseState(false,
* AppInfo.NOTFOUND_UPLOAD_DATA); }
*
* String savePath = (String) conf.get("savePath");
*/
// String originFileName = fileStream.getName();
String
originFileName
=
multipartFile
.
getOriginalFilename
();
String
suffix
=
FileType
.
getSuffixByFilename
(
originFileName
);
originFileName
=
originFileName
.
substring
(
0
,
originFileName
.
length
()
-
suffix
.
length
());
// savePath = savePath + suffix;
long
maxSize
=
((
Long
)
conf
.
get
(
"maxSize"
)).
longValue
();
if
(!
validType
(
suffix
,
(
String
[])
conf
.
get
(
"allowFiles"
)))
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_ALLOW_FILE_TYPE
);
}
// savePath = PathFormat.parse(savePath, originFileName);
// modified by Ternence
// String rootPath = ConfigManager.getRootPath(request, conf);
// String physicalPath = rootPath + savePath;
// InputStream is = fileStream.openStream();
InputStream
is
=
multipartFile
.
getInputStream
();
// State storageState = StorageManager.saveFileByInputStream(is,
// physicalPath, maxSize);
State
storageState
=
ueditorService
.
saveFileByInputStream
(
multipartFile
,
maxSize
);
is
.
close
();
if
(
storageState
.
isSuccess
())
{
try
{
JSONObject
jsonObj
=
new
JSONObject
(
storageState
.
toJSONString
());
// storageState.putInfo("url", PathFormat.format(savePath));
storageState
.
putInfo
(
"url"
,
jsonObj
.
getString
(
"url"
));
storageState
.
putInfo
(
"type"
,
suffix
);
storageState
.
putInfo
(
"original"
,
originFileName
+
suffix
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
storageState
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
new
BaseState
(
false
,
AppInfo
.
IO_ERROR
);
}
private
static
boolean
validType
(
String
type
,
String
[]
allowTypes
)
{
List
<
String
>
list
=
Arrays
.
asList
(
allowTypes
);
return
list
.
contains
(
type
);
}
}
src/main/java/com/baidu/ueditor/extend/UEFileManager.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
java.util.Map
;
import
com.baidu.ueditor.define.State
;
public
class
UEFileManager
{
private
String
[]
allowFiles
=
null
;
private
int
count
=
0
;
private
UeditorService
ueditorService
=
null
;
public
UEFileManager
(
Map
<
String
,
Object
>
conf
,
UeditorService
ueditorService
)
{
this
.
allowFiles
=
this
.
getAllowFiles
(
conf
.
get
(
"allowFiles"
));
this
.
count
=
(
Integer
)
conf
.
get
(
"count"
);
this
.
ueditorService
=
ueditorService
;
}
public
State
listFile
(
int
index
)
{
return
ueditorService
.
listFile
(
this
.
allowFiles
,
index
,
this
.
count
);
}
private
String
[]
getAllowFiles
(
Object
fileExt
)
{
String
[]
exts
=
null
;
String
ext
=
null
;
if
(
fileExt
==
null
)
{
return
new
String
[
0
];
}
exts
=
(
String
[])
fileExt
;
for
(
int
i
=
0
,
len
=
exts
.
length
;
i
<
len
;
i
++)
{
ext
=
exts
[
i
];
exts
[
i
]
=
ext
.
replace
(
"."
,
""
);
}
return
exts
;
}
}
src/main/java/com/baidu/ueditor/extend/UEImageHunter.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
com.baidu.ueditor.define.*
;
import
org.json.JSONObject
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
/**
* 图片抓取器
*
* @author hancong03@baidu.com
*
*/
public
class
UEImageHunter
{
private
static
final
int
BUFFER_SIZE
=
4096
;
private
UeditorService
ueditorService
=
null
;
private
List
<
String
>
allowTypes
=
null
;
private
long
maxSize
=
-
1
;
private
List
<
String
>
filters
=
null
;
public
UEImageHunter
(
Map
<
String
,
Object
>
conf
,
UeditorService
ueditorService
)
{
this
.
maxSize
=
(
Long
)
conf
.
get
(
"maxSize"
);
this
.
allowTypes
=
Arrays
.
asList
((
String
[])
conf
.
get
(
"allowFiles"
));
this
.
filters
=
Arrays
.
asList
((
String
[])
conf
.
get
(
"filter"
));
this
.
ueditorService
=
ueditorService
;
}
public
State
capture
(
String
[]
list
)
{
MultiState
state
=
new
MultiState
(
true
);
for
(
String
source
:
list
)
{
state
.
addState
(
captureRemoteData
(
source
));
}
return
state
;
}
public
State
captureRemoteData
(
String
urlStr
)
{
HttpURLConnection
connection
=
null
;
URL
url
=
null
;
String
suffix
=
null
;
try
{
url
=
new
URL
(
urlStr
);
if
(!
validHost
(
url
.
getHost
()))
{
return
new
BaseState
(
false
,
AppInfo
.
PREVENT_HOST
);
}
connection
=
(
HttpURLConnection
)
url
.
openConnection
();
connection
.
setInstanceFollowRedirects
(
true
);
connection
.
setUseCaches
(
true
);
connection
.
setRequestProperty
(
"User-Agent"
,
"Mozilla/5.0 (Windows 7; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 YNoteCef/5.8.0.1 (Windows)"
);
connection
.
setRequestProperty
(
"Accept-Encoding"
,
"gzip,deflate,identity"
);
//connection.setRequestProperty("Range", "bytes=0-1");
if
(!
validContentState
(
connection
.
getResponseCode
()))
{
return
new
BaseState
(
false
,
AppInfo
.
CONNECTION_ERROR
);
}
suffix
=
MIMEType
.
getSuffix
(
connection
.
getContentType
());
if
(!
validFileType
(
suffix
))
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_ALLOW_FILE_TYPE
);
}
if
(!
validFileSize
(
connection
.
getContentLength
()))
{
return
new
BaseState
(
false
,
AppInfo
.
MAX_SIZE
);
}
if
(
urlStr
.
indexOf
(
"?"
)
>
0
)
{
urlStr
=
urlStr
.
substring
(
0
,
urlStr
.
indexOf
(
"?"
));
}
String
fileName
=
urlStr
.
substring
(
urlStr
.
lastIndexOf
(
"/"
)
+
1
);
long
contentLengthLong
=
connection
.
getContentLengthLong
();
State
state
=
this
.
ueditorService
.
saveBinaryFile
(
connection
.
getInputStream
(),
contentLengthLong
,
fileName
);
if
(
state
.
isSuccess
())
{
JSONObject
jsonObj
=
new
JSONObject
(
state
.
toJSONString
());
state
.
putInfo
(
"url"
,
jsonObj
.
getString
(
"url"
));
state
.
putInfo
(
"source"
,
urlStr
);
}
return
state
;
}
catch
(
Exception
e
)
{
return
new
BaseState
(
false
,
AppInfo
.
REMOTE_FAIL
);
}
}
private
byte
[]
getBytes
(
InputStream
in
)
throws
IOException
{
ByteArrayOutputStream
out
=
new
ByteArrayOutputStream
(
BUFFER_SIZE
);
try
{
byte
[]
buffer
=
new
byte
[
BUFFER_SIZE
];
int
bytesRead
=
-
1
;
while
((
bytesRead
=
in
.
read
(
buffer
))
!=
-
1
)
{
out
.
write
(
buffer
,
0
,
bytesRead
);
}
out
.
flush
();
}
finally
{
try
{
in
.
close
();
}
catch
(
IOException
ex
)
{
}
try
{
out
.
close
();
}
catch
(
IOException
ex
)
{
}
}
return
out
.
toByteArray
();
}
private
boolean
validHost
(
String
hostname
)
{
return
!
filters
.
contains
(
hostname
);
}
private
boolean
validContentState
(
int
code
)
{
return
HttpURLConnection
.
HTTP_OK
==
code
;
}
private
boolean
validFileType
(
String
type
)
{
return
this
.
allowTypes
.
contains
(
type
);
}
private
boolean
validFileSize
(
int
size
)
{
return
size
<
this
.
maxSize
;
}
}
src/main/java/com/baidu/ueditor/extend/UEUploader.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
com.baidu.ueditor.define.State
;
public
class
UEUploader
{
private
HttpServletRequest
request
=
null
;
private
Map
<
String
,
Object
>
conf
=
null
;
private
UeditorService
ueditorService
=
null
;
public
UEUploader
(
HttpServletRequest
request
,
Map
<
String
,
Object
>
conf
,
UeditorService
ueditorService
)
{
this
.
request
=
request
;
this
.
conf
=
conf
;
this
.
ueditorService
=
ueditorService
;
}
public
final
State
doExec
()
{
String
filedName
=
(
String
)
conf
.
get
(
"fieldName"
);
State
state
=
null
;
if
(
"true"
.
equals
(
this
.
conf
.
get
(
"isBase64"
)))
{
// state = Base64Uploader.save(this.request, this.conf);
state
=
UEBase64Uploader
.
save
(
this
.
request
.
getParameter
(
filedName
),
this
.
conf
,
this
.
ueditorService
);
}
else
{
// state = BinaryUploader.save(this.request, this.conf);
state
=
UEBinaryUploader
.
save
(
this
.
request
,
this
.
conf
,
this
.
ueditorService
);
}
return
state
;
}
}
src/main/java/com/baidu/ueditor/extend/UeditorService.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
extend
;
import
com.baidu.ueditor.define.State
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.InputStream
;
public
interface
UeditorService
{
/**
* 获取上传的文件
*
* @param filedName
* 参数名
* @param request
* @return
*/
public
MultipartFile
getMultipartFile
(
String
filedName
,
HttpServletRequest
request
);
/**
* 存储文件
*
* @param multipartFile
* @param maxSize
* @return
*/
public
State
saveFileByInputStream
(
MultipartFile
multipartFile
,
long
maxSize
);
public
State
saveBinaryFile
(
InputStream
inputStream
,
long
fileSize
,
String
fileName
);
/**
* 存储文件
*
* @param data
* @param fileName
* @return
*/
public
State
saveBinaryFile
(
byte
[]
data
,
String
fileName
);
/**
* 获取文件列表
*
* @param allowFiles
* 允许显示的文件
* @param start
* 起始位置
* @param pageSize
* 每页显示条数
* @return
*/
public
State
listFile
(
String
[]
allowFiles
,
int
start
,
int
pageSize
);
}
src/main/java/com/baidu/ueditor/hunter/FileManager.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
hunter
;
import
java.io.File
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.Map
;
import
org.apache.commons.io.FileUtils
;
import
com.baidu.ueditor.PathFormat
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.MultiState
;
import
com.baidu.ueditor.define.State
;
public
class
FileManager
{
private
String
dir
=
null
;
private
String
rootPath
=
null
;
private
String
[]
allowFiles
=
null
;
private
int
count
=
0
;
public
FileManager
(
Map
<
String
,
Object
>
conf
)
{
this
.
rootPath
=
(
String
)
conf
.
get
(
"rootPath"
);
this
.
dir
=
this
.
rootPath
+
(
String
)
conf
.
get
(
"dir"
);
this
.
allowFiles
=
this
.
getAllowFiles
(
conf
.
get
(
"allowFiles"
)
);
this
.
count
=
(
Integer
)
conf
.
get
(
"count"
);
}
public
State
listFile
(
int
index
)
{
File
dir
=
new
File
(
this
.
dir
);
State
state
=
null
;
if
(
!
dir
.
exists
()
)
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_EXIST
);
}
if
(
!
dir
.
isDirectory
()
)
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_DIRECTORY
);
}
Collection
<
File
>
list
=
FileUtils
.
listFiles
(
dir
,
this
.
allowFiles
,
true
);
if
(
index
<
0
||
index
>
list
.
size
()
)
{
state
=
new
MultiState
(
true
);
}
else
{
Object
[]
fileList
=
Arrays
.
copyOfRange
(
list
.
toArray
(),
index
,
index
+
this
.
count
);
state
=
this
.
getState
(
fileList
);
}
state
.
putInfo
(
"start"
,
index
);
state
.
putInfo
(
"total"
,
list
.
size
()
);
return
state
;
}
private
State
getState
(
Object
[]
files
)
{
MultiState
state
=
new
MultiState
(
true
);
BaseState
fileState
=
null
;
File
file
=
null
;
for
(
Object
obj
:
files
)
{
if
(
obj
==
null
)
{
break
;
}
file
=
(
File
)
obj
;
fileState
=
new
BaseState
(
true
);
fileState
.
putInfo
(
"url"
,
PathFormat
.
format
(
this
.
getPath
(
file
)
)
);
state
.
addState
(
fileState
);
}
return
state
;
}
private
String
getPath
(
File
file
)
{
String
path
=
PathFormat
.
format
(
file
.
getAbsolutePath
()
);
return
path
.
replace
(
this
.
rootPath
,
"/"
);
}
private
String
[]
getAllowFiles
(
Object
fileExt
)
{
String
[]
exts
=
null
;
String
ext
=
null
;
if
(
fileExt
==
null
)
{
return
new
String
[
0
];
}
exts
=
(
String
[])
fileExt
;
for
(
int
i
=
0
,
len
=
exts
.
length
;
i
<
len
;
i
++
)
{
ext
=
exts
[
i
];
exts
[
i
]
=
ext
.
replace
(
"."
,
""
);
}
return
exts
;
}
}
src/main/java/com/baidu/ueditor/hunter/ImageHunter.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
hunter
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
com.baidu.ueditor.PathFormat
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.MIMEType
;
import
com.baidu.ueditor.define.MultiState
;
import
com.baidu.ueditor.define.State
;
import
com.baidu.ueditor.upload.StorageManager
;
/**
* 图片抓取器
* @author hancong03@baidu.com
*
*/
public
class
ImageHunter
{
private
String
filename
=
null
;
private
String
savePath
=
null
;
private
String
rootPath
=
null
;
private
List
<
String
>
allowTypes
=
null
;
private
long
maxSize
=
-
1
;
private
List
<
String
>
filters
=
null
;
public
ImageHunter
(
Map
<
String
,
Object
>
conf
)
{
this
.
filename
=
(
String
)
conf
.
get
(
"filename"
);
this
.
savePath
=
(
String
)
conf
.
get
(
"savePath"
);
this
.
rootPath
=
(
String
)
conf
.
get
(
"rootPath"
);
this
.
maxSize
=
(
Long
)
conf
.
get
(
"maxSize"
);
this
.
allowTypes
=
Arrays
.
asList
(
(
String
[])
conf
.
get
(
"allowFiles"
)
);
this
.
filters
=
Arrays
.
asList
(
(
String
[])
conf
.
get
(
"filter"
)
);
}
public
State
capture
(
String
[]
list
)
{
MultiState
state
=
new
MultiState
(
true
);
for
(
String
source
:
list
)
{
state
.
addState
(
captureRemoteData
(
source
)
);
}
return
state
;
}
public
State
captureRemoteData
(
String
urlStr
)
{
HttpURLConnection
connection
=
null
;
URL
url
=
null
;
String
suffix
=
null
;
try
{
url
=
new
URL
(
urlStr
);
if
(
!
validHost
(
url
.
getHost
()
)
)
{
return
new
BaseState
(
false
,
AppInfo
.
PREVENT_HOST
);
}
connection
=
(
HttpURLConnection
)
url
.
openConnection
();
connection
.
setInstanceFollowRedirects
(
true
);
connection
.
setUseCaches
(
true
);
if
(
!
validContentState
(
connection
.
getResponseCode
()
)
)
{
return
new
BaseState
(
false
,
AppInfo
.
CONNECTION_ERROR
);
}
suffix
=
MIMEType
.
getSuffix
(
connection
.
getContentType
()
);
if
(
!
validFileType
(
suffix
)
)
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_ALLOW_FILE_TYPE
);
}
if
(
!
validFileSize
(
connection
.
getContentLength
()
)
)
{
return
new
BaseState
(
false
,
AppInfo
.
MAX_SIZE
);
}
String
savePath
=
this
.
getPath
(
this
.
savePath
,
this
.
filename
,
suffix
);
String
physicalPath
=
this
.
rootPath
+
savePath
;
State
state
=
StorageManager
.
saveFileByInputStream
(
connection
.
getInputStream
(),
physicalPath
);
if
(
state
.
isSuccess
()
)
{
state
.
putInfo
(
"url"
,
PathFormat
.
format
(
savePath
)
);
state
.
putInfo
(
"source"
,
urlStr
);
}
return
state
;
}
catch
(
Exception
e
)
{
return
new
BaseState
(
false
,
AppInfo
.
REMOTE_FAIL
);
}
}
private
String
getPath
(
String
savePath
,
String
filename
,
String
suffix
)
{
return
PathFormat
.
parse
(
savePath
+
suffix
,
filename
);
}
private
boolean
validHost
(
String
hostname
)
{
return
!
filters
.
contains
(
hostname
);
}
private
boolean
validContentState
(
int
code
)
{
return
HttpURLConnection
.
HTTP_OK
==
code
;
}
private
boolean
validFileType
(
String
type
)
{
return
this
.
allowTypes
.
contains
(
type
);
}
private
boolean
validFileSize
(
int
size
)
{
return
size
<
this
.
maxSize
;
}
}
src/main/java/com/baidu/ueditor/upload/Base64Uploader.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
upload
;
import
com.baidu.ueditor.ConfigManager
;
import
com.baidu.ueditor.PathFormat
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.FileType
;
import
com.baidu.ueditor.define.State
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Base64
;
import
java.util.Map
;
public
final
class
Base64Uploader
{
public
static
State
save
(
HttpServletRequest
request
,
Map
<
String
,
Object
>
conf
)
{
String
filedName
=
(
String
)
conf
.
get
(
"fieldName"
);
String
fileName
=
request
.
getParameter
(
filedName
);
byte
[]
data
=
decode
(
fileName
);
long
maxSize
=
(
Long
)
conf
.
get
(
"maxSize"
);
if
(!
validSize
(
data
,
maxSize
))
{
return
new
BaseState
(
false
,
AppInfo
.
MAX_SIZE
);
}
String
suffix
=
FileType
.
getSuffix
(
"JPG"
);
String
savePath
=
PathFormat
.
parse
((
String
)
conf
.
get
(
"savePath"
),
(
String
)
conf
.
get
(
"filename"
));
savePath
=
savePath
+
suffix
;
String
rootPath
=
ConfigManager
.
getRootPath
(
request
,
conf
);
String
physicalPath
=
rootPath
+
savePath
;
State
storageState
=
StorageManager
.
saveBinaryFile
(
data
,
physicalPath
);
if
(
storageState
.
isSuccess
())
{
storageState
.
putInfo
(
"url"
,
PathFormat
.
format
(
savePath
));
storageState
.
putInfo
(
"type"
,
suffix
);
storageState
.
putInfo
(
"original"
,
""
);
}
return
storageState
;
}
private
static
byte
[]
decode
(
String
content
)
{
return
Base64
.
getDecoder
().
decode
(
content
);
}
private
static
boolean
validSize
(
byte
[]
data
,
long
length
)
{
return
data
.
length
<=
length
;
}
}
\ No newline at end of file
src/main/java/com/baidu/ueditor/upload/BinaryUploader.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
upload
;
import
com.baidu.ueditor.ConfigManager
;
import
com.baidu.ueditor.PathFormat
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.FileType
;
import
com.baidu.ueditor.define.State
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
org.apache.commons.fileupload.FileItemIterator
;
import
org.apache.commons.fileupload.FileItemStream
;
import
org.apache.commons.fileupload.FileUploadException
;
import
org.apache.commons.fileupload.disk.DiskFileItemFactory
;
import
org.apache.commons.fileupload.servlet.ServletFileUpload
;
public
class
BinaryUploader
{
public
static
final
State
save
(
HttpServletRequest
request
,
Map
<
String
,
Object
>
conf
)
{
FileItemStream
fileStream
=
null
;
boolean
isAjaxUpload
=
request
.
getHeader
(
"X_Requested_With"
)
!=
null
;
if
(!
ServletFileUpload
.
isMultipartContent
(
request
))
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_MULTIPART_CONTENT
);
}
ServletFileUpload
upload
=
new
ServletFileUpload
(
new
DiskFileItemFactory
());
if
(
isAjaxUpload
)
{
upload
.
setHeaderEncoding
(
"UTF-8"
);
}
try
{
FileItemIterator
iterator
=
upload
.
getItemIterator
(
request
);
while
(
iterator
.
hasNext
())
{
fileStream
=
iterator
.
next
();
if
(!
fileStream
.
isFormField
())
break
;
fileStream
=
null
;
}
if
(
fileStream
==
null
)
{
return
new
BaseState
(
false
,
AppInfo
.
NOTFOUND_UPLOAD_DATA
);
}
String
savePath
=
(
String
)
conf
.
get
(
"savePath"
);
String
originFileName
=
fileStream
.
getName
();
String
suffix
=
FileType
.
getSuffixByFilename
(
originFileName
);
originFileName
=
originFileName
.
substring
(
0
,
originFileName
.
length
()
-
suffix
.
length
());
savePath
=
savePath
+
suffix
;
long
maxSize
=
((
Long
)
conf
.
get
(
"maxSize"
)).
longValue
();
if
(!
validType
(
suffix
,
(
String
[])
conf
.
get
(
"allowFiles"
)))
{
return
new
BaseState
(
false
,
AppInfo
.
NOT_ALLOW_FILE_TYPE
);
}
savePath
=
PathFormat
.
parse
(
savePath
,
originFileName
);
//modified by Ternence
String
rootPath
=
ConfigManager
.
getRootPath
(
request
,
conf
);
String
physicalPath
=
rootPath
+
savePath
;
InputStream
is
=
fileStream
.
openStream
();
State
storageState
=
StorageManager
.
saveFileByInputStream
(
is
,
physicalPath
,
maxSize
);
is
.
close
();
if
(
storageState
.
isSuccess
())
{
storageState
.
putInfo
(
"url"
,
PathFormat
.
format
(
savePath
));
storageState
.
putInfo
(
"type"
,
suffix
);
storageState
.
putInfo
(
"original"
,
originFileName
+
suffix
);
}
return
storageState
;
}
catch
(
FileUploadException
e
)
{
return
new
BaseState
(
false
,
AppInfo
.
PARSE_REQUEST_ERROR
);
}
catch
(
IOException
e
)
{
}
return
new
BaseState
(
false
,
AppInfo
.
IO_ERROR
);
}
private
static
boolean
validType
(
String
type
,
String
[]
allowTypes
)
{
List
<
String
>
list
=
Arrays
.
asList
(
allowTypes
);
return
list
.
contains
(
type
);
}
}
src/main/java/com/baidu/ueditor/upload/StorageManager.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
upload
;
import
com.baidu.ueditor.define.AppInfo
;
import
com.baidu.ueditor.define.BaseState
;
import
com.baidu.ueditor.define.State
;
import
java.io.BufferedInputStream
;
import
java.io.BufferedOutputStream
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
org.apache.commons.io.FileUtils
;
public
class
StorageManager
{
public
static
final
int
BUFFER_SIZE
=
8192
;
public
StorageManager
()
{
}
public
static
State
saveBinaryFile
(
byte
[]
data
,
String
path
)
{
File
file
=
new
File
(
path
);
State
state
=
valid
(
file
);
if
(!
state
.
isSuccess
())
{
return
state
;
}
try
{
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
file
));
bos
.
write
(
data
);
bos
.
flush
();
bos
.
close
();
}
catch
(
IOException
ioe
)
{
return
new
BaseState
(
false
,
AppInfo
.
IO_ERROR
);
}
state
=
new
BaseState
(
true
,
file
.
getAbsolutePath
());
state
.
putInfo
(
"size"
,
data
.
length
);
state
.
putInfo
(
"title"
,
file
.
getName
()
);
return
state
;
}
public
static
State
saveFileByInputStream
(
InputStream
is
,
String
path
,
long
maxSize
)
{
State
state
=
null
;
File
tmpFile
=
getTmpFile
();
byte
[]
dataBuf
=
new
byte
[
2048
];
BufferedInputStream
bis
=
new
BufferedInputStream
(
is
,
StorageManager
.
BUFFER_SIZE
);
try
{
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
tmpFile
),
StorageManager
.
BUFFER_SIZE
);
int
count
=
0
;
while
((
count
=
bis
.
read
(
dataBuf
))
!=
-
1
)
{
bos
.
write
(
dataBuf
,
0
,
count
);
}
bos
.
flush
();
bos
.
close
();
if
(
tmpFile
.
length
()
>
maxSize
)
{
tmpFile
.
delete
();
return
new
BaseState
(
false
,
AppInfo
.
MAX_SIZE
);
}
state
=
saveTmpFile
(
tmpFile
,
path
);
if
(!
state
.
isSuccess
())
{
tmpFile
.
delete
();
}
return
state
;
}
catch
(
IOException
e
)
{
}
return
new
BaseState
(
false
,
AppInfo
.
IO_ERROR
);
}
public
static
State
saveFileByInputStream
(
InputStream
is
,
String
path
)
{
State
state
=
null
;
File
tmpFile
=
getTmpFile
();
byte
[]
dataBuf
=
new
byte
[
2048
];
BufferedInputStream
bis
=
new
BufferedInputStream
(
is
,
StorageManager
.
BUFFER_SIZE
);
try
{
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
tmpFile
),
StorageManager
.
BUFFER_SIZE
);
int
count
=
0
;
while
((
count
=
bis
.
read
(
dataBuf
))
!=
-
1
)
{
bos
.
write
(
dataBuf
,
0
,
count
);
}
bos
.
flush
();
bos
.
close
();
state
=
saveTmpFile
(
tmpFile
,
path
);
if
(!
state
.
isSuccess
())
{
tmpFile
.
delete
();
}
return
state
;
}
catch
(
IOException
e
)
{
}
return
new
BaseState
(
false
,
AppInfo
.
IO_ERROR
);
}
private
static
File
getTmpFile
()
{
File
tmpDir
=
FileUtils
.
getTempDirectory
();
String
tmpFileName
=
(
Math
.
random
()
*
10000
+
""
).
replace
(
"."
,
""
);
return
new
File
(
tmpDir
,
tmpFileName
);
}
private
static
State
saveTmpFile
(
File
tmpFile
,
String
path
)
{
State
state
=
null
;
File
targetFile
=
new
File
(
path
);
if
(
targetFile
.
canWrite
())
{
return
new
BaseState
(
false
,
AppInfo
.
PERMISSION_DENIED
);
}
try
{
FileUtils
.
moveFile
(
tmpFile
,
targetFile
);
}
catch
(
IOException
e
)
{
return
new
BaseState
(
false
,
AppInfo
.
IO_ERROR
);
}
state
=
new
BaseState
(
true
);
state
.
putInfo
(
"size"
,
targetFile
.
length
()
);
state
.
putInfo
(
"title"
,
targetFile
.
getName
()
);
return
state
;
}
private
static
State
valid
(
File
file
)
{
File
parentPath
=
file
.
getParentFile
();
if
((!
parentPath
.
exists
())
&&
(!
parentPath
.
mkdirs
()))
{
return
new
BaseState
(
false
,
AppInfo
.
FAILED_CREATE_FILE
);
}
if
(!
parentPath
.
canWrite
())
{
return
new
BaseState
(
false
,
AppInfo
.
PERMISSION_DENIED
);
}
return
new
BaseState
(
true
);
}
}
src/main/java/com/baidu/ueditor/upload/Uploader.java
deleted
100644 → 0
View file @
b5edd796
package
com
.
baidu
.
ueditor
.
upload
;
import
com.baidu.ueditor.define.State
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
public
class
Uploader
{
private
HttpServletRequest
request
=
null
;
private
Map
<
String
,
Object
>
conf
=
null
;
public
Uploader
(
HttpServletRequest
request
,
Map
<
String
,
Object
>
conf
)
{
this
.
request
=
request
;
this
.
conf
=
conf
;
}
public
final
State
doExec
()
{
State
state
=
null
;
if
(
"true"
.
equals
(
this
.
conf
.
get
(
"isBase64"
)))
{
state
=
Base64Uploader
.
save
(
this
.
request
,
this
.
conf
);
}
else
{
state
=
BinaryUploader
.
save
(
this
.
request
,
this
.
conf
);
}
return
state
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment