Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
I
ibzdisk
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
ibiz4jteam
ibzdisk
提交
ff207da6
提交
ff207da6
编写于
8月 18, 2020
作者:
sq3536
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
网盘
上级
65d1bb03
变更
7
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
200 行增加
和
141 行删除
+200
-141
DiskCoreService.java
...ibizlab/core/disk/extensions/service/DiskCoreService.java
+72
-18
FileCoreService.java
...ibizlab/core/disk/extensions/service/FileCoreService.java
+19
-0
DiskCoreResource.java
...java/cn/ibizlab/api/rest/extensions/DiskCoreResource.java
+99
-30
FileItem.java
...k-util/src/main/java/cn/ibizlab/util/domain/FileItem.java
+10
-0
FileController.java
...il/src/main/java/cn/ibizlab/util/rest/FileController.java
+0
-76
FileService.java
...il/src/main/java/cn/ibizlab/util/service/FileService.java
+0
-11
SimpleUserService.java
.../main/java/cn/ibizlab/util/service/SimpleUserService.java
+0
-6
未找到文件。
ibzdisk-core/src/main/java/cn/ibizlab/core/disk/extensions/service/DiskCoreService.java
浏览文件 @
ff207da6
...
...
@@ -3,7 +3,9 @@ package cn.ibizlab.core.disk.extensions.service;
import
cn.ibizlab.core.disk.domain.SDFile
;
import
cn.ibizlab.core.disk.service.ISDFileService
;
import
cn.ibizlab.util.domain.FileItem
;
import
cn.ibizlab.util.errors.BadRequestAlertException
;
import
cn.ibizlab.util.errors.InternalServerErrorException
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -17,8 +19,11 @@ import org.springframework.web.multipart.MultipartFile;
import
java.io.File
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.sql.Wrapper
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
@Primary
@Slf4j
...
...
@@ -33,6 +38,9 @@ public class DiskCoreService {
@Autowired
private
ISDFileService
sdFileService
;
@Autowired
private
FileCoreService
fileCoreService
;
public
FileItem
saveFile
(
MultipartFile
multipartFile
)
{
return
saveFile
(
""
,
multipartFile
);
}
...
...
@@ -42,27 +50,42 @@ public class DiskCoreService {
}
public
FileItem
saveFile
(
String
folder
,
String
fileId
,
MultipartFile
multipartFile
)
{
return
saveFile
(
folder
,
""
,
""
,
""
,
multipartFile
);
}
public
FileItem
saveFile
(
String
folder
,
String
fileId
,
String
ownerType
,
String
ownerId
,
MultipartFile
multipartFile
)
{
SDFile
sdFile
=
new
SDFile
();
if
(!
StringUtils
.
isEmpty
(
fileId
))
sdFile
.
setId
(
fileId
);
if
(!
StringUtils
.
isEmpty
(
folder
))
sdFile
.
setId
(
folder
);
return
saveFile
(
sdFile
,
multipartFile
);
if
(!
StringUtils
.
isEmpty
(
ownerId
))
sdFile
.
setOwnerId
(
ownerId
);
if
(!
StringUtils
.
isEmpty
(
ownerType
))
sdFile
.
setOwnerType
(
ownerType
);
String
fileName
=
multipartFile
.
getOriginalFilename
();
sdFile
.
setName
(
fileName
);
int
size
=
(
int
)
multipartFile
.
getSize
();
sdFile
.
setFileSize
(
size
);
try
{
return
saveFile
(
sdFile
,
multipartFile
.
getBytes
());
}
catch
(
IOException
e
)
{
throw
new
InternalServerErrorException
(
"文件上传失败"
);
}
}
public
FileItem
saveFile
(
SDFile
sdFile
,
MultipartFile
multipartFile
)
{
public
FileItem
saveFile
(
SDFile
sdFile
,
byte
[]
multipartFile
)
{
FileItem
item
=
null
;
try
{
String
fileName
=
multipartFile
.
getOriginalFilename
();
sdFile
.
setName
(
fileName
);
String
fileName
=
sdFile
.
getName
();
String
extension
=
"."
+
getExtensionName
(
fileName
);
sdFile
.
setExtension
(
extension
);
String
digestCode
=
DigestUtils
.
md5DigestAsHex
(
multipartFile
.
getInputStream
()
);
String
digestCode
=
DigestUtils
.
md5DigestAsHex
(
multipartFile
);
sdFile
.
setDigestCode
(
digestCode
);
String
fileId
=
sdFile
.
getId
();
if
(
StringUtils
.
isEmpty
(
fileId
))
{
fileId
=
simpleDateFormat
.
format
(
new
Date
()).
concat
(
"
-
"
).
concat
(
digestCode
);
fileId
=
simpleDateFormat
.
format
(
new
Date
()).
concat
(
"
_
"
).
concat
(
digestCode
);
sdFile
.
setId
(
fileId
);
}
String
folder
=
sdFile
.
getFolder
();
...
...
@@ -73,19 +96,18 @@ public class DiskCoreService {
}
String
filePath
=
sdFile
.
getFilePath
();
if
(
StringUtils
.
isEmpty
(
filePath
))
{
filePath
=
folder
.
concat
(
File
.
separator
).
concat
(
fileId
).
concat
(
File
.
separator
).
concat
(
fileName
);
filePath
=
folder
.
concat
(
File
.
separator
).
concat
(
fileId
.
replace
(
"_"
,
File
.
separator
)
).
concat
(
File
.
separator
).
concat
(
fileName
);
sdFile
.
setFilePath
(
filePath
);
}
int
size
=
(
int
)
multipartFile
.
getSize
();
sdFile
.
setFileSize
(
size
);
String
fileFullPath
=
this
.
fileRoot
.
concat
(
filePath
);
fileFullPath
=
fileFullPath
.
replace
(
"\\"
,
File
.
separator
).
replace
(
"/"
,
File
.
separator
);
File
file
=
new
File
(
fileFullPath
);
File
parent
=
new
File
(
file
.
getParent
());
if
(!
parent
.
exists
())
parent
.
mkdirs
();
FileCopyUtils
.
copy
(
multipartFile
.
getInputStream
()
,
Files
.
newOutputStream
(
file
.
toPath
()));
item
=
new
FileItem
(
fileId
,
fileName
,
fileId
,
fileName
,
s
ize
,
extension
);
FileCopyUtils
.
copy
(
multipartFile
,
Files
.
newOutputStream
(
file
.
toPath
()));
item
=
new
FileItem
(
fileId
,
fileName
,
fileId
,
fileName
,
s
dFile
.
getFileSize
(),
extension
,
fileCoreService
.
getAuthCode
(
fileId
)
);
sdFileService
.
save
(
sdFile
);
}
catch
(
IOException
e
)
{
throw
new
InternalServerErrorException
(
"文件上传失败"
);
...
...
@@ -98,14 +120,23 @@ public class DiskCoreService {
}
public
File
getFile
(
String
folder
,
String
fileId
)
{
return
getFile
(
""
,
fileId
,
""
);
}
public
File
getFile
(
String
folder
,
String
fileId
,
String
authcode
)
{
if
(
StringUtils
.
isEmpty
(
folder
))
folder
=
"ibizutil"
;
String
dirpath
=
this
.
fileRoot
.
concat
(
folder
).
concat
(
File
.
separator
).
concat
(
fileId
);
if
(
folder
.
toUpperCase
().
startsWith
(
"ibizutil"
))
{
String
dirpath
=
this
.
fileRoot
.
concat
(
folder
).
concat
(
File
.
separator
).
concat
(
fileId
.
replace
(
"_"
,
File
.
separator
));
File
parent
=
new
File
(
dirpath
);
if
(
parent
.
exists
()
&&
parent
.
isDirectory
()
&&
parent
.
listFiles
().
length
>
0
)
{
return
parent
.
listFiles
()[
0
];
}
return
getFile
(
sdFileService
.
get
(
fileId
));
}
else
if
(
StringUtils
.
isEmpty
(
authcode
)||(
authcode
.
equals
(
fileCoreService
.
getAuthCode
(
fileId
))))
{
throw
new
BadRequestAlertException
(
"没有权限下载"
,
"SDFile"
,
""
);
}
SDFile
sdFile
=
sdFileService
.
get
(
fileId
);
return
getFile
(
sdFile
);
}
public
File
getFile
(
SDFile
sdFile
)
{
...
...
@@ -119,6 +150,29 @@ public class DiskCoreService {
throw
new
InternalServerErrorException
(
"文件未找到"
);
}
public
List
<
FileItem
>
getFileList
(
String
ownerType
,
String
ownerId
)
{
List
<
FileItem
>
fileItems
=
new
ArrayList
<>();
sdFileService
.
list
(
Wrappers
.<
SDFile
>
lambdaQuery
().
eq
(
SDFile:
:
getOwnerType
,
ownerType
).
eq
(
SDFile:
:
getOwnerId
,
ownerId
).
orderByAsc
(
SDFile:
:
getCreatedate
)).
forEach
(
item
->
{
fileItems
.
add
(
new
FileItem
(
item
.
getId
(),
item
.
getName
(),
item
.
getId
(),
item
.
getName
(),
item
.
getFileSize
(),
item
.
getExtension
(),
fileCoreService
.
getAuthCode
(
item
.
getId
())));
});
return
fileItems
;
}
public
void
saveFileList
(
String
ownerType
,
String
ownerId
,
List
<
FileItem
>
fileItems
)
{
List
<
SDFile
>
sdFiles
=
new
ArrayList
<>();
fileItems
.
forEach
(
item
->
{
SDFile
sdFile
=
new
SDFile
();
sdFile
.
setId
(
item
.
getId
());
sdFile
.
setOwnerType
(
ownerType
);
sdFile
.
setOwnerId
(
ownerId
);
sdFiles
.
add
(
sdFile
);
});
sdFileService
.
updateBatch
(
sdFiles
);
}
/**
* 获取文件扩展名
* @param fileName
...
...
ibzdisk-core/src/main/java/cn/ibizlab/core/disk/extensions/service/FileCoreService.java
0 → 100644
浏览文件 @
ff207da6
package
cn
.
ibizlab
.
core
.
disk
.
extensions
.
service
;
import
com.baomidou.mybatisplus.core.toolkit.IdWorker
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.stereotype.Service
;
@Primary
@Slf4j
@Service
public
class
FileCoreService
{
@Cacheable
(
value
=
"file"
,
key
=
"'authcode:'+#p0"
)
public
String
getAuthCode
(
String
fileId
)
{
return
IdWorker
.
getIdStr
();
}
}
ibzdisk-provider/ibzdisk-provider-api/src/main/java/cn/ibizlab/api/rest/extensions/DiskCoreResource.java
浏览文件 @
ff207da6
...
...
@@ -3,17 +3,22 @@ package cn.ibizlab.api.rest.extensions;
import
cn.ibizlab.core.disk.extensions.service.DiskCoreService
;
import
cn.ibizlab.util.domain.FileItem
;
import
cn.ibizlab.util.
service.FileService
;
import
cn.ibizlab.util.
errors.BadRequestAlertException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.*
;
import
java.util.Hashtable
;
import
java.util.List
;
@Slf4j
@RestController
...
...
@@ -38,6 +43,12 @@ public class DiskCoreResource
type
.
put
(
".tif"
,
"image/tiff"
);
type
.
put
(
".tiff"
,
"image/tiff"
);
type
.
put
(
".png"
,
"image/png"
);
type
.
put
(
".doc"
,
"application/msword"
);
type
.
put
(
".docx"
,
"application/msword"
);
type
.
put
(
".xls"
,
"application/vnd.ms-excel"
);
type
.
put
(
".xlsx"
,
"application/vnd.ms-excel"
);
type
.
put
(
".wps"
,
"application/vnd.ms-works"
);
type
.
put
(
".txt"
,
"text/plain"
);
}
if
(
type
.
containsKey
(
ext
.
toLowerCase
()))
...
...
@@ -47,38 +58,38 @@ public class DiskCoreResource
}
@PostMapping
(
value
=
"{folder}/upload"
)
public
ResponseEntity
<
FileItem
>
upload
(
@PathVariable
(
"folder"
)
String
folder
,
@RequestParam
(
"file"
)
MultipartFile
multipartFile
){
return
ResponseEntity
.
ok
().
body
(
diskCoreService
.
saveFile
(
folder
,
multipartFile
));
}
@Value
(
"${ibiz.filePath:/app/file/}"
)
private
String
fileRoot
;
@PostMapping
(
value
=
"{folder}/upload/{id}"
)
public
ResponseEntity
<
FileItem
>
updatefile
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
@RequestParam
(
"file"
)
MultipartFile
multipartFile
){
return
ResponseEntity
.
ok
().
body
(
diskCoreService
.
saveFile
(
folder
,
id
,
multipartFile
));
}
@
GetMapping
(
value
=
"{folder}/download/{id}"
)
@ResponseStatus
(
HttpStatus
.
OK
)
public
void
download
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
HttpServletResponse
response
){
File
file
=
diskCoreService
.
getFile
(
folder
,
id
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
getFileName
(
file
.
getName
()));
this
.
sendRespose
(
response
,
file
);
@
PostMapping
(
value
=
{
"net-disk/upload/{folder}/{id}/{name}.{ext}"
,
"{folder}/upload/{id}"
,
"{folder}/upload"
}
)
public
ResponseEntity
<
FileItem
>
updatefile
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
value
=
"id"
,
required
=
false
)
String
id
,
@PathVariable
(
value
=
"name"
,
required
=
false
)
String
name
,
@PathVariable
(
value
=
"ext"
,
required
=
false
)
String
ext
,
@RequestParam
(
value
=
"ownertype"
,
required
=
false
)
String
ownertype
,
@RequestParam
(
value
=
"ownerid"
,
required
=
false
)
String
ownerid
,
@RequestParam
(
"file"
)
MultipartFile
multipartFile
){
return
ResponseEntity
.
ok
().
body
(
diskCoreService
.
saveFile
(
folder
,
id
,
ownertype
,
ownerid
,
multipartFile
)
);
}
@GetMapping
(
value
=
"net-disk/download/{folder}/{id}/{name}.{ext}"
)
@GetMapping
(
value
=
{
"net-disk/download/{folder}/{id}/{name}.{ext}"
,
"{folder}/download/{id}"
})
@ResponseStatus
(
HttpStatus
.
OK
)
public
void
download
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
@PathVariable
(
"name"
)
String
name
,
@PathVariable
(
"ext"
)
String
ext
,
HttpServletResponse
response
){
File
file
=
diskCoreService
.
getFile
(
folder
,
id
);
@PathVariable
(
value
=
"name"
,
required
=
false
)
String
name
,
@PathVariable
(
value
=
"ext"
,
required
=
false
)
String
ext
,
@RequestHeader
(
value
=
"authcode"
,
required
=
false
)
String
authcode
,
@RequestParam
(
value
=
"authcode"
,
required
=
false
)
String
checkcode
,
HttpServletResponse
response
){
File
file
=
diskCoreService
.
getFile
(
folder
,
id
,
StringUtils
.
isEmpty
(
authcode
)?
checkcode:
authcode
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
getFileName
(
file
.
getName
()));
this
.
sendRespose
(
response
,
file
);
}
@GetMapping
(
value
=
"net-disk/file/{folder}/{id}/{name}.{ext}"
)
@GetMapping
(
value
=
"net-disk/file
s
/{folder}/{id}/{name}.{ext}"
)
@ResponseStatus
(
HttpStatus
.
OK
)
public
void
open
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
@PathVariable
(
"name"
)
String
name
,
@PathVariable
(
"ext"
)
String
ext
,
HttpServletResponse
response
){
File
file
=
diskCoreService
.
getFile
(
folder
,
id
);
@PathVariable
(
"name"
)
String
name
,
@PathVariable
(
"ext"
)
String
ext
,
@RequestHeader
(
value
=
"authcode"
,
required
=
false
)
String
authcode
,
@RequestParam
(
value
=
"authcode"
,
required
=
false
)
String
checkcode
,
HttpServletResponse
response
){
File
file
=
diskCoreService
.
getFile
(
folder
,
id
,
StringUtils
.
isEmpty
(
authcode
)?
checkcode:
authcode
);
String
type
=
getType
(
ext
);
response
.
setContentType
(
type
);
if
(
type
.
toLowerCase
().
equals
(
"application/octet-stream"
))
...
...
@@ -86,16 +97,53 @@ public class DiskCoreResource
this
.
sendRespose
(
response
,
file
);
}
@Value
(
"ibiz.file.proxy.previewpath"
)
private
String
previewPath
;
@GetMapping
(
value
=
"net-disk/preview/{folder}/{id}/{name}.{ext}"
)
@ResponseStatus
(
HttpStatus
.
OK
)
public
void
preview
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
@PathVariable
(
"name"
)
String
name
,
@PathVariable
(
"ext"
)
String
ext
,
HttpServletResponse
response
){
File
file
=
diskCoreService
.
getFile
(
folder
,
id
);
String
type
=
getType
(
ext
);
response
.
setContentType
(
type
);
if
(
type
.
toLowerCase
().
equals
(
"application/octet-stream"
))
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
getFileName
(
file
.
getName
()));
this
.
sendRespose
(
response
,
file
);
public
ResponseEntity
preview
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
@PathVariable
(
"name"
)
String
name
,
@PathVariable
(
"ext"
)
String
ext
,
@RequestHeader
(
value
=
"authcode"
,
required
=
false
)
String
authcode
,
@RequestParam
(
value
=
"authcode"
,
required
=
false
)
String
checkcode
,
HttpServletRequest
request
){
if
(
StringUtils
.
isEmpty
(
previewPath
))
throw
new
BadRequestAlertException
(
"未配置预览系统地址"
,
"SDFile"
,
""
);
String
redirectUrl
=
request
.
getScheme
().
concat
(
"://"
).
concat
(
request
.
getServerName
());
if
(
request
.
getServerPort
()!=
80
&&
request
.
getServerPort
()!=
443
)
redirectUrl
=
redirectUrl
.
concat
(
":"
).
concat
(
request
.
getServerPort
()+
""
);
redirectUrl
=
redirectUrl
.
concat
(
"/net-disk/download/"
)
.
concat
(
folder
).
concat
(
"/"
).
concat
(
folder
).
concat
(
"/"
).
concat
(
name
).
concat
(
"."
).
concat
(
ext
).
concat
(
"?authcode="
).
concat
(
StringUtils
.
isEmpty
(
authcode
)?
checkcode:
authcode
);
redirectUrl
=
previewPath
.
concat
(
"?url="
).
concat
(
encodeURIComponent
(
redirectUrl
));
return
ResponseEntity
.
status
(
HttpStatus
.
MOVED_PERMANENTLY
).
header
(
HttpHeaders
.
LOCATION
,
redirectUrl
).
build
();
}
@Value
(
"ibiz.file.proxy.ocrpath"
)
private
String
ocrPath
;
@GetMapping
(
value
=
"net-disk/ocrview/{folder}/{id}/{name}.{ext}"
)
public
ResponseEntity
ocrview
(
@PathVariable
(
"folder"
)
String
folder
,
@PathVariable
(
"id"
)
String
id
,
@PathVariable
(
"name"
)
String
name
,
@PathVariable
(
"ext"
)
String
ext
,
@RequestHeader
(
value
=
"authcode"
,
required
=
false
)
String
authcode
,
@RequestParam
(
value
=
"authcode"
,
required
=
false
)
String
checkcode
,
HttpServletRequest
request
){
if
(
StringUtils
.
isEmpty
(
previewPath
))
throw
new
BadRequestAlertException
(
"未配置预览系统地址"
,
"SDFile"
,
""
);
String
redirectUrl
=
request
.
getScheme
().
concat
(
"://"
).
concat
(
request
.
getServerName
());
if
(
request
.
getServerPort
()!=
80
&&
request
.
getServerPort
()!=
443
)
redirectUrl
=
redirectUrl
.
concat
(
":"
).
concat
(
request
.
getServerPort
()+
""
);
redirectUrl
=
redirectUrl
.
concat
(
"/net-disk/download/"
)
.
concat
(
folder
).
concat
(
"/"
).
concat
(
folder
).
concat
(
"/"
).
concat
(
name
).
concat
(
"."
).
concat
(
ext
).
concat
(
"?authcode="
).
concat
(
StringUtils
.
isEmpty
(
authcode
)?
checkcode:
authcode
);
redirectUrl
=
ocrPath
.
concat
(
"?url="
).
concat
(
encodeURIComponent
(
redirectUrl
));
return
ResponseEntity
.
status
(
HttpStatus
.
MOVED_PERMANENTLY
).
header
(
HttpHeaders
.
LOCATION
,
redirectUrl
).
build
();
}
@GetMapping
(
value
=
"net-disk/files/{ownertype}/{ownerid}"
)
public
ResponseEntity
<
List
<
FileItem
>>
getFiles
(
@PathVariable
(
"ownertype"
)
String
ownertype
,
@PathVariable
(
"ownerid"
)
String
ownerid
){
return
ResponseEntity
.
ok
().
body
(
diskCoreService
.
getFileList
(
ownertype
,
ownerid
));
}
@PostMapping
(
value
=
"net-disk/files/{ownertype}/{ownerid}"
)
public
ResponseEntity
<
Boolean
>
saveFiles
(
@PathVariable
(
"ownertype"
)
String
ownertype
,
@PathVariable
(
"ownerid"
)
String
ownerid
,
@RequestBody
List
<
FileItem
>
fileItems
){
diskCoreService
.
saveFileList
(
ownertype
,
ownerid
,
fileItems
);
return
ResponseEntity
.
ok
().
body
(
true
);
}
protected
void
sendRespose
(
HttpServletResponse
response
,
File
file
){
...
...
@@ -142,4 +190,25 @@ public class DiskCoreResource
}
return
fileName
;
}
protected
String
encodeURIComponent
(
String
s
)
{
String
result
=
null
;
try
{
result
=
java
.
net
.
URLEncoder
.
encode
(
s
,
"UTF-8"
)
.
replaceAll
(
"\\+"
,
"%20"
)
.
replaceAll
(
"\\!"
,
"%21"
)
.
replaceAll
(
"\\'"
,
"%27"
)
.
replaceAll
(
"\\("
,
"%28"
)
.
replaceAll
(
"\\)"
,
"%29"
)
.
replaceAll
(
"\\~"
,
"%7E"
);
}
// This exception should never occur.
catch
(
UnsupportedEncodingException
e
)
{
result
=
s
;
}
return
result
;
}
}
\ No newline at end of file
ibzdisk-util/src/main/java/cn/ibizlab/util/domain/FileItem.java
浏览文件 @
ff207da6
...
...
@@ -18,4 +18,14 @@ public class FileItem
private
String
filename
;
private
long
size
;
private
String
ext
;
private
String
authcode
;
public
FileItem
(
String
id
,
String
name
,
String
fileid
,
String
filename
,
long
size
,
String
ext
)
{
this
.
id
=
id
;
this
.
name
=
name
;
this
.
fileid
=
fileid
;
this
.
filename
=
filename
;
this
.
size
=
size
;
this
.
ext
=
ext
;
}
}
ibzdisk-util/src/main/java/cn/ibizlab/util/rest/FileController.java
浏览文件 @
ff207da6
package
cn
.
ibizlab
.
util
.
rest
;
import
cn.ibizlab.util.domain.FileItem
;
import
cn.ibizlab.util.service.FileService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.*
;
@Slf4j
@RestController
@RequestMapping
(
"/"
)
public
class
FileController
{
@Autowired
private
FileService
fileService
;
@PostMapping
(
value
=
"${ibiz.file.uploadpath:ibizutil/upload}"
)
public
ResponseEntity
<
FileItem
>
upload
(
@RequestParam
(
"file"
)
MultipartFile
multipartFile
){
return
ResponseEntity
.
ok
().
body
(
fileService
.
saveFile
(
multipartFile
));
}
private
final
String
defaultdownloadpath
=
"ibizutil/download/{id}"
;
@GetMapping
(
value
=
"${ibiz.file.downloadpath:"
+
defaultdownloadpath
+
"}"
)
@ResponseStatus
(
HttpStatus
.
OK
)
public
void
download
(
@PathVariable
String
id
,
HttpServletResponse
response
){
File
file
=
fileService
.
getFile
(
id
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
getFileName
(
file
.
getName
()));
this
.
sendRespose
(
response
,
file
);
}
protected
void
sendRespose
(
HttpServletResponse
response
,
File
file
){
BufferedInputStream
bis
=
null
;
BufferedOutputStream
bos
=
null
;
try
{
bis
=
new
BufferedInputStream
(
new
FileInputStream
(
file
));
bos
=
new
BufferedOutputStream
(
response
.
getOutputStream
());
byte
[]
buff
=
new
byte
[
2048
];
int
bytesRead
;
while
(-
1
!=
(
bytesRead
=
bis
.
read
(
buff
,
0
,
buff
.
length
)))
{
bos
.
write
(
buff
,
0
,
bytesRead
);
}
}
catch
(
Exception
e
)
{
//throw e;
}
finally
{
if
(
bis
!=
null
)
{
try
{
bis
.
close
();
}
catch
(
IOException
e
)
{
}
}
if
(
bos
!=
null
)
{
try
{
bos
.
close
();
}
catch
(
IOException
e
)
{
}
}
}
}
protected
String
getFileName
(
String
fileName
){
try
{
return
new
String
(
fileName
.
getBytes
(
"utf-8"
),
"iso8859-1"
);
//防止中文乱码
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
return
fileName
;
}
}
\ No newline at end of file
ibzdisk-util/src/main/java/cn/ibizlab/util/service/FileService.java
已删除
100644 → 0
浏览文件 @
65d1bb03
package
cn
.
ibizlab
.
util
.
service
;
import
cn.ibizlab.util.domain.FileItem
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
public
interface
FileService
{
FileItem
saveFile
(
MultipartFile
multipartFile
);
File
getFile
(
String
fileid
);
}
\ No newline at end of file
ibzdisk-util/src/main/java/cn/ibizlab/util/service/SimpleUserService.java
已删除
100644 → 0
浏览文件 @
65d1bb03
package
cn
.
ibizlab
.
util
.
service
;
public
class
SimpleUserService
{
}
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录