Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
finance-manage
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
finance-oa
finance-manage
Commits
927b0571
Commit
927b0571
authored
Feb 25, 2022
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
组件fileUpload支持多文件同时选择上传
parent
8f23ff72
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
166 additions
and
28 deletions
+166
-28
ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
...mon/src/main/java/com/ruoyi/common/utils/StringUtils.java
+49
-0
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
...ain/java/com/ruoyi/common/utils/file/FileUploadUtils.java
+3
-2
ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java
...common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java
+86
-0
ruoyi-ui/src/components/FileUpload/index.vue
ruoyi-ui/src/components/FileUpload/index.vue
+20
-9
ruoyi-ui/src/components/ImageUpload/index.vue
ruoyi-ui/src/components/ImageUpload/index.vue
+7
-16
ruoyi-ui/src/views/system/user/index.vue
ruoyi-ui/src/views/system/user/index.vue
+1
-1
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
View file @
927b0571
...
...
@@ -531,4 +531,53 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
{
return
(
T
)
obj
;
}
/**
* 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。
*
* @param num 数字对象
* @param size 字符串指定长度
* @return 返回数字的字符串格式,该字符串为指定长度。
*/
public
static
final
String
padl
(
final
Number
num
,
final
int
size
)
{
return
padl
(
num
.
toString
(),
size
,
'0'
);
}
/**
* 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。
*
* @param s 原始字符串
* @param size 字符串指定长度
* @param c 用于补齐的字符
* @return 返回指定长度的字符串,由原字符串左补齐或截取得到。
*/
public
static
final
String
padl
(
final
String
s
,
final
int
size
,
final
char
c
)
{
final
StringBuilder
sb
=
new
StringBuilder
(
size
);
if
(
s
!=
null
)
{
final
int
len
=
s
.
length
();
if
(
s
.
length
()
<=
size
)
{
for
(
int
i
=
size
-
len
;
i
>
0
;
i
--)
{
sb
.
append
(
c
);
}
sb
.
append
(
s
);
}
else
{
return
s
.
substring
(
len
-
size
,
len
);
}
}
else
{
for
(
int
i
=
size
;
i
>
0
;
i
--)
{
sb
.
append
(
c
);
}
}
return
sb
.
toString
();
}
}
\ No newline at end of file
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
View file @
927b0571
...
...
@@ -12,7 +12,7 @@ import com.ruoyi.common.exception.file.FileSizeLimitExceededException;
import
com.ruoyi.common.exception.file.InvalidExtensionException
;
import
com.ruoyi.common.utils.DateUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.uuid.
IdUtils
;
import
com.ruoyi.common.utils.uuid.
Seq
;
/**
* 文件上传工具类
...
...
@@ -121,7 +121,8 @@ public class FileUploadUtils
*/
public
static
final
String
extractFilename
(
MultipartFile
file
)
{
return
DateUtils
.
datePath
()
+
"/"
+
IdUtils
.
fastUUID
()
+
"."
+
getExtension
(
file
);
return
StringUtils
.
format
(
"{}/{}_{}.{}"
,
DateUtils
.
datePath
(),
FilenameUtils
.
getBaseName
(
file
.
getOriginalFilename
()),
Seq
.
getId
(
Seq
.
uploadSeqType
),
getExtension
(
file
));
}
public
static
final
File
getAbsoluteFile
(
String
uploadDir
,
String
fileName
)
throws
IOException
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java
0 → 100644
View file @
927b0571
package
com.ruoyi.common.utils.uuid
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
com.ruoyi.common.utils.DateUtils
;
import
com.ruoyi.common.utils.StringUtils
;
/**
* @author ruoyi 序列生成类
*/
public
class
Seq
{
// 通用序列类型
public
static
final
String
commSeqType
=
"COMMON"
;
// 上传序列类型
public
static
final
String
uploadSeqType
=
"UPLOAD"
;
// 通用接口序列数
private
static
AtomicInteger
commSeq
=
new
AtomicInteger
(
1
);
// 上传接口序列数
private
static
AtomicInteger
uploadSeq
=
new
AtomicInteger
(
1
);
// 机器标识
private
static
String
machineCode
=
"A"
;
/**
* 获取通用序列号
*
* @return 序列值
*/
public
static
String
getId
()
{
return
getId
(
commSeqType
);
}
/**
* 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串
*
* @return 序列值
*/
public
static
String
getId
(
String
type
)
{
AtomicInteger
atomicInt
=
commSeq
;
if
(
uploadSeqType
.
equals
(
type
))
{
atomicInt
=
uploadSeq
;
}
return
getId
(
atomicInt
,
3
);
}
/**
* 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串
*
* @param atomicInt 序列数
* @param length 数值长度
* @return 序列值
*/
public
static
String
getId
(
AtomicInteger
atomicInt
,
int
length
)
{
String
result
=
DateUtils
.
dateTimeNow
();
result
+=
machineCode
;
result
+=
getSeq
(
atomicInt
,
length
);
return
result
;
}
/**
* 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数
*
* @return 序列值
*/
private
synchronized
static
String
getSeq
(
AtomicInteger
atomicInt
,
int
length
)
{
// 先取值再+1
int
value
=
atomicInt
.
getAndIncrement
();
// 如果更新后值>=10 的 (length)幂次方则重置为1
int
maxSeq
=
(
int
)
Math
.
pow
(
10
,
length
);
if
(
atomicInt
.
get
()
>=
maxSeq
)
{
atomicInt
.
set
(
1
);
}
// 转字符串,用0左补齐
return
StringUtils
.
padl
(
value
,
length
);
}
}
ruoyi-ui/src/components/FileUpload/index.vue
View file @
927b0571
<
template
>
<div
class=
"upload-file"
>
<el-upload
multiple
:action=
"uploadFileUrl"
:before-upload=
"handleBeforeUpload"
:file-list=
"fileList"
...
...
@@ -69,6 +70,8 @@ export default {
},
data
()
{
return
{
number
:
0
,
uploadList
:
[],
baseUrl
:
process
.
env
.
VUE_APP_BASE_API
,
uploadFileUrl
:
process
.
env
.
VUE_APP_BASE_API
+
"
/common/upload
"
,
// 上传的图片服务器地址
headers
:
{
...
...
@@ -122,7 +125,7 @@ export default {
return
false
;
});
if
(
!
isTypeOk
)
{
this
.
$m
essage
.
e
rror
(
`文件格式不正确, 请上传
${
this
.
fileType
.
join
(
"
/
"
)}
格式文件!`
);
this
.
$m
odal
.
msgE
rror
(
`文件格式不正确, 请上传
${
this
.
fileType
.
join
(
"
/
"
)}
格式文件!`
);
return
false
;
}
}
...
...
@@ -130,25 +133,33 @@ export default {
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
;
if
(
!
isLt
)
{
this
.
$m
essage
.
e
rror
(
`上传文件大小不能超过
${
this
.
fileSize
}
MB!`
);
this
.
$m
odal
.
msgE
rror
(
`上传文件大小不能超过
${
this
.
fileSize
}
MB!`
);
return
false
;
}
}
this
.
$modal
.
loading
(
"
正在上传文件,请稍候...
"
);
this
.
number
++
;
return
true
;
},
// 文件个数超出
handleExceed
()
{
this
.
$m
essage
.
e
rror
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
);
this
.
$m
odal
.
msgE
rror
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
);
},
// 上传失败
handleUploadError
(
err
)
{
this
.
$message
.
error
(
"
上传失败, 请重试
"
);
this
.
$modal
.
msgError
(
"
上传图片失败,请重试
"
);
this
.
$modal
.
closeLoading
()
},
// 上传成功回调
handleUploadSuccess
(
res
,
file
)
{
this
.
$message
.
success
(
"
上传成功
"
);
this
.
fileList
.
push
({
name
:
res
.
fileName
,
url
:
res
.
fileName
});
handleUploadSuccess
(
res
)
{
this
.
uploadList
.
push
({
name
:
res
.
fileName
,
url
:
res
.
fileName
});
if
(
this
.
uploadList
.
length
===
this
.
number
)
{
this
.
fileList
=
this
.
fileList
.
concat
(
this
.
uploadList
);
this
.
uploadList
=
[];
this
.
number
=
0
;
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
));
this
.
$modal
.
closeLoading
();
}
},
// 删除文件
handleDelete
(
index
)
{
...
...
@@ -158,7 +169,7 @@ export default {
// 获取文件名称
getFileName
(
name
)
{
if
(
name
.
lastIndexOf
(
"
/
"
)
>
-
1
)
{
return
name
.
slice
(
name
.
lastIndexOf
(
"
/
"
)
+
1
)
.
toLowerCase
()
;
return
name
.
slice
(
name
.
lastIndexOf
(
"
/
"
)
+
1
);
}
else
{
return
""
;
}
...
...
ruoyi-ui/src/components/ImageUpload/index.vue
View file @
927b0571
...
...
@@ -133,7 +133,7 @@ export default {
this
.
uploadList
=
[];
this
.
number
=
0
;
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
));
this
.
loading
.
close
();
this
.
$modal
.
closeLoading
();
}
},
// 上传前loading加载
...
...
@@ -154,36 +154,27 @@ export default {
}
if
(
!
isImg
)
{
this
.
$message
.
error
(
`文件格式不正确, 请上传
${
this
.
fileType
.
join
(
"
/
"
)}
图片格式文件!`
);
this
.
$modal
.
msgError
(
`文件格式不正确, 请上传
${
this
.
fileType
.
join
(
"
/
"
)}
图片格式文件!`
);
return
false
;
}
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
;
if
(
!
isLt
)
{
this
.
$m
essage
.
e
rror
(
`上传头像图片大小不能超过
${
this
.
fileSize
}
MB!`
);
this
.
$m
odal
.
msgE
rror
(
`上传头像图片大小不能超过
${
this
.
fileSize
}
MB!`
);
return
false
;
}
}
this
.
loading
=
this
.
$loading
({
lock
:
true
,
text
:
"
上传中
"
,
background
:
"
rgba(0, 0, 0, 0.7)
"
,
});
this
.
$modal
.
loading
(
"
正在上传图片,请稍候...
"
);
this
.
number
++
;
},
// 文件个数超出
handleExceed
()
{
this
.
$m
essage
.
e
rror
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
);
this
.
$m
odal
.
msgE
rror
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
);
},
// 上传失败
handleUploadError
()
{
this
.
$message
({
type
:
"
error
"
,
message
:
"
上传失败
"
,
});
this
.
loading
.
close
();
this
.
$modal
.
msgError
(
"
上传图片失败,请重试
"
);
this
.
$modal
.
closeLoading
();
},
// 预览
handlePictureCardPreview
(
file
)
{
...
...
ruoyi-ui/src/views/system/user/index.vue
View file @
927b0571
...
...
@@ -443,7 +443,7 @@ export default {
email
:
[
{
type
:
"
email
"
,
message
:
"
'
请输入正确的邮箱地址
"
,
message
:
"
请输入正确的邮箱地址
"
,
trigger
:
[
"
blur
"
,
"
change
"
]
}
],
...
...
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