Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
slm-fileview
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
梁杰芳
slm-fileview
Commits
bce9a624
Commit
bce9a624
authored
Dec 28, 2020
by
kl
Committed by
kl
Dec 28, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新XML文件预览UI风格,调整类文本预览架构,更方便扩展
parent
dac3606b
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
229 additions
and
91 deletions
+229
-91
freemarker_implicit.ftl
server/src/main/config/freemarker_implicit.ftl
+2
-0
FilePreview.java
server/src/main/java/cn/keking/service/FilePreview.java
+2
-0
MarkdownFilePreviewImpl.java
.../java/cn/keking/service/impl/MarkdownFilePreviewImpl.java
+2
-4
SimTextFilePreviewImpl.java
...n/java/cn/keking/service/impl/SimTextFilePreviewImpl.java
+0
-6
XmlFilePreviewImpl.java
.../main/java/cn/keking/service/impl/XmlFilePreviewImpl.java
+2
-4
OnlinePreviewController.java
...ava/cn/keking/web/controller/OnlinePreviewController.java
+1
-0
index.ftl
server/src/main/resources/web/index.ftl
+1
-1
markdown.ftl
server/src/main/resources/web/markdown.ftl
+118
-0
txt.ftl
server/src/main/resources/web/txt.ftl
+4
-76
xml.ftl
server/src/main/resources/web/xml.ftl
+97
-0
No files found.
server/src/main/config/freemarker_implicit.ftl
View file @
bce9a624
[#ftl]
[#-- @implicitly included --]
[#-- @ftlvariable name="file" type="cn.keking.model.FileAttribute" --]
[#-- @ftlvariable name="fileName" type="java.lang.String" --]
[#-- @ftlvariable name="fileTree" type="java.lang.String" --]
[#-- @ftlvariable name="baseUrl" type="java.lang.String" --]
[#-- @ftlvariable name="imgUrls" type="String" --]
...
...
server/src/main/java/cn/keking/service/FilePreview.java
View file @
bce9a624
...
...
@@ -17,6 +17,8 @@ public interface FilePreview {
String
OFFICE_PICTURE_FILE_PREVIEW_PAGE
=
"officePicture"
;
String
TXT_FILE_PREVIEW_PAGE
=
"txt"
;
String
EXEL_FILE_PREVIEW_PAGE
=
"html"
;
String
XML_FILE_PREVIEW_PAGE
=
"xml"
;
String
MARKDOWN_FILE_PREVIEW_PAGE
=
"markdown"
;
String
NOT_SUPPORTED_FILE_PAGE
=
"fileNotSupported"
;
String
filePreviewHandle
(
String
url
,
Model
model
,
FileAttribute
fileAttribute
);
...
...
server/src/main/java/cn/keking/service/impl/MarkdownFilePreviewImpl.java
View file @
bce9a624
...
...
@@ -5,8 +5,6 @@ import cn.keking.service.FilePreview;
import
org.springframework.stereotype.Service
;
import
org.springframework.ui.Model
;
import
static
cn
.
keking
.
service
.
impl
.
SimTextFilePreviewImpl
.
TEXT_TYPE
;
/**
* @author kl (http://kailing.pub)
* @since 2020/12/25
...
...
@@ -23,7 +21,7 @@ public class MarkdownFilePreviewImpl implements FilePreview {
@Override
public
String
filePreviewHandle
(
String
url
,
Model
model
,
FileAttribute
fileAttribute
)
{
model
.
addAttribute
(
TEXT_TYPE
,
"markdown"
);
return
simTextFilePreview
.
filePreviewHandle
(
url
,
model
,
fileAttribute
)
;
simTextFilePreview
.
filePreviewHandle
(
url
,
model
,
fileAttribute
);
return
MARKDOWN_FILE_PREVIEW_PAGE
;
}
}
server/src/main/java/cn/keking/service/impl/SimTextFilePreviewImpl.java
View file @
bce9a624
...
...
@@ -20,9 +20,6 @@ import java.nio.charset.StandardCharsets;
@Service
public
class
SimTextFilePreviewImpl
implements
FilePreview
{
public
static
final
String
TEXT_TYPE
=
"textType"
;
public
static
final
String
DEFAULT_TEXT_TYPE
=
"simText"
;
private
final
OtherFilePreviewImpl
otherFilePreview
;
public
SimTextFilePreviewImpl
(
OtherFilePreviewImpl
otherFilePreview
)
{
...
...
@@ -43,9 +40,6 @@ public class SimTextFilePreviewImpl implements FilePreview {
}
catch
(
IOException
e
)
{
return
otherFilePreview
.
notSupportedFile
(
model
,
fileAttribute
,
e
.
getLocalizedMessage
());
}
if
(!
model
.
containsAttribute
(
TEXT_TYPE
))
{
model
.
addAttribute
(
TEXT_TYPE
,
DEFAULT_TEXT_TYPE
);
}
return
TXT_FILE_PREVIEW_PAGE
;
}
...
...
server/src/main/java/cn/keking/service/impl/XmlFilePreviewImpl.java
View file @
bce9a624
...
...
@@ -5,8 +5,6 @@ import cn.keking.service.FilePreview;
import
org.springframework.stereotype.Service
;
import
org.springframework.ui.Model
;
import
static
cn
.
keking
.
service
.
impl
.
SimTextFilePreviewImpl
.
TEXT_TYPE
;
/**
* @author kl (http://kailing.pub)
* @since 2020/12/25
...
...
@@ -22,7 +20,7 @@ public class XmlFilePreviewImpl implements FilePreview {
@Override
public
String
filePreviewHandle
(
String
url
,
Model
model
,
FileAttribute
fileAttribute
)
{
model
.
addAttribute
(
TEXT_TYPE
,
"xml"
);
return
simTextFilePreview
.
filePreviewHandle
(
url
,
model
,
fileAttribute
)
;
simTextFilePreview
.
filePreviewHandle
(
url
,
model
,
fileAttribute
);
return
XML_FILE_PREVIEW_PAGE
;
}
}
server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java
View file @
bce9a624
...
...
@@ -57,6 +57,7 @@ public class OnlinePreviewController {
return
otherFilePreview
.
notSupportedFile
(
model
,
errorMsg
);
}
FileAttribute
fileAttribute
=
fileHandlerService
.
getFileAttribute
(
fileUrl
,
req
);
model
.
addAttribute
(
"file"
,
fileAttribute
);
FilePreview
filePreview
=
previewFactory
.
get
(
fileAttribute
);
logger
.
info
(
"预览文件url:{},previewType:{}"
,
fileUrl
,
fileAttribute
.
getType
());
return
filePreview
.
filePreviewHandle
(
fileUrl
,
model
,
fileAttribute
);
...
...
server/src/main/resources/web/index.ftl
View file @
bce9a624
...
...
@@ -61,7 +61,7 @@
<div
style=
"padding: 10px"
>
<form
enctype=
"multipart/form-data"
id=
"fileUpload"
>
<input
type=
"file"
name=
"file"
/>
<input
type=
"button"
id=
"btnubmit"
value=
" 上 传 "
/>
<input
type=
"button"
id=
"btn
S
ubmit"
value=
" 上 传 "
/>
</form>
</div>
<div>
...
...
server/src/main/resources/web/markdown.ftl
0 → 100644
View file @
bce9a624
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"utf-8"
/>
<meta
name=
"viewport"
content=
"width=device-width, user-scalable=yes, initial-scale=1.0"
>
<title>
普通文本预览
</title>
</head>
<body>
<input
hidden
id=
"textData"
value=
"${textData}"
/>
<div
class=
"container"
>
<div
class=
"panel panel-default"
>
<div
id=
"markdown_btn"
class=
"panel-heading"
>
<h4
class=
"panel-title"
>
<a
data-toggle=
"collapse"
data-parent=
"#accordion"
href=
"#collapseOne"
>
${file.name}
</a>
</h4>
</div>
<div
id=
"text_btn"
class=
"panel-heading"
>
<h4
class=
"panel-title"
>
<a
data-toggle=
"collapse"
data-parent=
"#accordion"
href=
"#collapseOne"
>
${file.name}
</a>
</h4>
</div>
<div
class=
"panel-body"
>
<div
id=
"markdown"
></div>
</div>
</div>
</div>
<link
rel=
"stylesheet"
href=
"bootstrap/css/bootstrap.min.css"
/>
<script
src=
"js/jquery-3.0.0.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/jquery.form.min.js"
type=
"text/javascript"
></script>
<script
src=
"bootstrap/js/bootstrap.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/watermark.js"
type=
"text/javascript"
></script>
<script
src=
"js/marked.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/base64.min.js"
type=
"text/javascript"
></script>
<script>
/**
* 初始化
*/
window
.
onload
=
function
()
{
$
(
"#markdown_btn"
).
hide
()
initWaterMark
();
loadMarkdown
();
}
/**
* 初始化水印
*/
function
initWaterMark
()
{
let
watermarkTxt
=
'${watermarkTxt}'
;
if
(
watermarkTxt
!==
''
)
{
watermark
.
init
({
watermark_txt
:
'${watermarkTxt}'
,
watermark_x
:
0
,
watermark_y
:
0
,
watermark_rows
:
0
,
watermark_cols
:
0
,
watermark_x_space
:
$
{
watermarkXSpace
},
watermark_y_space
:
$
{
watermarkYSpace
},
watermark_font
:
'${watermarkFont}'
,
watermark_fontsize
:
'${watermarkFontsize}'
,
watermark_color
:
'${watermarkColor}'
,
watermark_alpha
:
$
{
watermarkAlpha
},
watermark_width
:
$
{
watermarkWidth
},
watermark_height
:
$
{
watermarkHeight
},
watermark_angle
:
$
{
watermarkAngle
},
});
}
}
/**
* 加载markdown
*/
function
loadMarkdown
()
{
var
textData
=
Base64
.
decode
(
$
(
"#textData"
).
val
())
window
.
textPreData
=
"<pre style='background-color: #FFFFFF;border:none'>"
+
textData
+
"</pre>"
;
window
.
textMarkdownData
=
marked
(
textData
);
$
(
"#markdown"
).
html
(
window
.
textMarkdownData
);
}
$
(
function
()
{
$
(
"#markdown_btn"
).
click
(
function
()
{
$
(
"#markdown"
).
html
(
window
.
textMarkdownData
);
$
(
"#text_btn"
).
show
()
$
(
"#markdown_btn"
).
hide
()
});
$
(
"#text_btn"
).
click
(
function
()
{
$
(
"#markdown_btn"
).
show
()
$
(
"#text_btn"
).
hide
();
$
(
"#markdown"
).
html
(
window
.
textPreData
);
});
});
</script>
<style>
*
{
margin
:
0
;
padding
:
0
;
}
html
,
body
{
height
:
100%
;
width
:
100%
;
}
</style>
</body>
</html>
server/src/main/resources/web/txt.ftl
View file @
bce9a624
...
...
@@ -6,46 +6,18 @@
<title>
普通文本预览
</title>
</head>
<body>
<input
hidden
id=
"textType"
value=
"${textType}"
/>
<input
hidden
id=
"textData"
value=
"${textData}"
/>
<div
class=
"container"
>
<
#
if
textType
??
&&
textType =
=
"
markdown
"
>
<div
class=
"panel panel-default"
>
<div
id=
"markdown_btn"
class=
"panel-heading"
>
<h4
class=
"panel-title"
>
<a
data-toggle=
"collapse"
data-parent=
"#accordion"
href=
"#collapseOne"
>
切换markdown
</a>
</h4>
</div>
<div
id=
"text_btn"
class=
"panel-heading"
>
<h4
class=
"panel-title"
>
<a
data-toggle=
"collapse"
data-parent=
"#accordion"
href=
"#collapseOne"
>
切换text
</a>
</h4>
</div>
<div
class=
"panel-body"
>
<div
id=
"markdown"
></div>
</div>
</div>
<
#
elseif
textType
??
&&
textType =
=
"
xml
"
>
<div
id=
"xml"
style=
"padding: 18px;"
></div>
<
#
else
>
<div
id=
"text"
></div>
</
#
if>
<div
id=
"text"
></div>
</div>
<link
rel=
"stylesheet"
href=
"css/xmlTreeViewer.css"
/>
<link
rel=
"stylesheet"
href=
"bootstrap/css/bootstrap.min.css"
/>
<script
src=
"js/jquery-3.0.0.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/jquery.form.min.js"
type=
"text/javascript"
></script>
<script
src=
"bootstrap/js/bootstrap.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/watermark.js"
type=
"text/javascript"
></script>
<script
src=
"js/marked.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/xmlTreeViewer.js"
type=
"text/javascript"
></script>
<script
src=
"js/base64.min.js"
type=
"text/javascript"
></script>
<script>
...
...
@@ -53,12 +25,8 @@
* 初始化
*/
window
.
onload
=
function
()
{
$
(
"#markdown_btn"
).
hide
()
initWaterMark
();
fetchData
();
loadText
();
loadXmlData
()
loadMarkdown
();
}
/**
...
...
@@ -86,56 +54,16 @@
}
}
/**
* 获取文本数据
*/
function
fetchData
()
{
window
.
textData
=
Base64
.
decode
(
$
(
"#textData"
).
val
())
window
.
textPreData
=
"<pre style='background-color: #FFFFFF;border:none'>"
+
window
.
textData
+
"</pre>"
;
}
/**
*加载普通文本
*/
function
loadText
()
{
$
(
"#text"
).
html
(
window
.
textPreData
);
}
var
textData
=
Base64
.
decode
(
$
(
"#textData"
).
val
())
var
textPreData
=
"<pre style='background-color: #FFFFFF;border:none'>"
+
textData
+
"</pre>"
;
/**
* 加载markdown
*/
function
loadMarkdown
()
{
if
(
$
(
"#textType"
).
val
()
===
"markdown"
)
{
window
.
textMarkdownData
=
marked
(
window
.
textData
);
$
(
"#markdown"
).
html
(
window
.
textMarkdownData
);
}
$
(
"#text"
).
html
(
textPreData
);
}
/**
* 加载xml数据
*/
function
loadXmlData
()
{
if
(
$
(
"#textType"
).
val
()
===
"xml"
)
{
var
xmlNode
=
xmlTreeViewer
.
parseXML
(
window
.
textData
);
var
retNode
=
xmlTreeViewer
.
getXMLViewerNode
(
xmlNode
.
xml
);
$
(
"#xml"
).
html
(
retNode
);
}
}
$
(
function
()
{
$
(
"#markdown_btn"
).
click
(
function
()
{
$
(
"#markdown"
).
html
(
window
.
textMarkdownData
);
$
(
"#text_btn"
).
show
()
$
(
"#markdown_btn"
).
hide
()
});
$
(
"#text_btn"
).
click
(
function
()
{
$
(
"#markdown_btn"
).
show
()
$
(
"#text_btn"
).
hide
();
$
(
"#markdown"
).
html
(
window
.
textPreData
);
});
});
</script>
<style>
*
{
...
...
server/src/main/resources/web/xml.ftl
0 → 100644
View file @
bce9a624
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"utf-8"
/>
<meta
name=
"viewport"
content=
"width=device-width, user-scalable=yes, initial-scale=1.0"
>
<title>
普通文本预览
</title>
</head>
<body>
<input
hidden
id=
"textData"
value=
"${textData}"
/>
<div
class=
"container"
>
<div
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
<h4
class=
"panel-title"
>
<a
data-toggle=
"collapse"
data-parent=
"#accordion"
href=
"#collapseOne"
>
${file.name}
</a>
</h4>
</div>
<div
class=
"panel-body"
>
<div
id=
"xml"
></div>
</div>
</div>
</div>
<link
rel=
"stylesheet"
href=
"css/xmlTreeViewer.css"
/>
<link
rel=
"stylesheet"
href=
"bootstrap/css/bootstrap.min.css"
/>
<script
src=
"js/jquery-3.0.0.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/jquery.form.min.js"
type=
"text/javascript"
></script>
<script
src=
"bootstrap/js/bootstrap.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/watermark.js"
type=
"text/javascript"
></script>
<script
src=
"js/marked.min.js"
type=
"text/javascript"
></script>
<script
src=
"js/xmlTreeViewer.js"
type=
"text/javascript"
></script>
<script
src=
"js/base64.min.js"
type=
"text/javascript"
></script>
<script>
/**
* 初始化
*/
window
.
onload
=
function
()
{
initWaterMark
();
loadXmlData
()
}
/**
* 初始化水印
*/
function
initWaterMark
()
{
let
watermarkTxt
=
'${watermarkTxt}'
;
if
(
watermarkTxt
!==
''
)
{
watermark
.
init
({
watermark_txt
:
'${watermarkTxt}'
,
watermark_x
:
0
,
watermark_y
:
0
,
watermark_rows
:
0
,
watermark_cols
:
0
,
watermark_x_space
:
$
{
watermarkXSpace
},
watermark_y_space
:
$
{
watermarkYSpace
},
watermark_font
:
'${watermarkFont}'
,
watermark_fontsize
:
'${watermarkFontsize}'
,
watermark_color
:
'${watermarkColor}'
,
watermark_alpha
:
$
{
watermarkAlpha
},
watermark_width
:
$
{
watermarkWidth
},
watermark_height
:
$
{
watermarkHeight
},
watermark_angle
:
$
{
watermarkAngle
},
});
}
}
/**
* 加载xml数据
*/
function
loadXmlData
()
{
var
textData
=
Base64
.
decode
(
$
(
"#textData"
).
val
())
var
xmlNode
=
xmlTreeViewer
.
parseXML
(
textData
);
var
retNode
=
xmlTreeViewer
.
getXMLViewerNode
(
xmlNode
.
xml
);
$
(
"#xml"
).
html
(
retNode
);
}
</script>
<style>
*
{
margin
:
0
;
padding
:
0
;
}
html
,
body
{
height
:
100%
;
width
:
100%
;
}
</style>
</body>
</html>
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