This commit is contained in:
20932067@zju.edu.cn 2021-02-18 23:16:29 +08:00
parent 2adae0e122
commit 510e8486a8
18 changed files with 617 additions and 234 deletions

View File

@ -0,0 +1,14 @@
import axios from "axios";
import {getToken} from "@/utils/auth";
export function downloadFile(fileId){
axios({
method:'get',
url:process.env.VUE_APP_BASE_API+'/system/file/download/'+fileId,
headers:{
token:'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
}).then(res=>{
return res;
})
}

View File

@ -62,5 +62,12 @@ export function getRoleAll(){
type:2 type:2
} }
}) })
} }
export function downloadFile(fileId){
return request({
url:'/system/file/download/'+fileId,
method:'get'
})
}

View File

@ -152,6 +152,13 @@
v-hasPermi="['system:file:remove']" v-hasPermi="['system:file:remove']"
>删除 >删除
</el-button> </el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDownload(scope.row)"
>下载
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -210,6 +217,7 @@
<script> <script>
import {listFile, getFile, delFile, addFile, updateFile, exportFile, getRoleAll} from "@/api/system/file"; import {listFile, getFile, delFile, addFile, updateFile, exportFile, getRoleAll} from "@/api/system/file";
import {downloadFile} from '@/api/system/download'
import ImageUpload from '@/components/ImageUpload'; import ImageUpload from '@/components/ImageUpload';
import FileUpload from '@/components/FileUpload'; import FileUpload from '@/components/FileUpload';
@ -279,7 +287,6 @@ export default {
this.isPublicOptions = response.data; this.isPublicOptions = response.data;
}); });
getRoleAll().then(res => { getRoleAll().then(res => {
console.log(res)
this.roleOptions = res.data this.roleOptions = res.data
}) })
}, },
@ -328,6 +335,19 @@ export default {
this.fileForm.open = false; this.fileForm.open = false;
this.reset(); this.reset();
}, },
//
handleDownload(row){
this.$confirm("是否确认下载"+row.fileName+"?","警告",{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function (){
return downloadFile(row.fileId)
}).then(res =>{
console.log(res)
// this.download(data.msg);
})
},
// //
reset() { reset() {
this.form = { this.form = {
@ -340,6 +360,7 @@ export default {
fileType: null, fileType: null,
isPublic: "1", isPublic: "1",
}; };
this.fileForm.url = null
this.resetForm("form"); this.resetForm("form");
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
@ -399,12 +420,14 @@ export default {
updateFile(this.form).then(response => { updateFile(this.form).then(response => {
this.msgSuccess("修改成功"); this.msgSuccess("修改成功");
this.fileForm.open = false; this.fileForm.open = false;
this.changeArray()
this.getList(); this.getList();
}); });
} else { } else {
addFile(this.form).then(response => { addFile(this.form).then(response => {
this.msgSuccess("新增成功"); this.msgSuccess("新增成功");
this.fileForm.open = false; this.fileForm.open = false;
this.changeArray()
this.getList(); this.getList();
}); });
} }

View File

@ -1,6 +1,9 @@
package com.hchyun.web.controller.system; package com.hchyun.web.controller.system;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -8,9 +11,13 @@ import java.util.Map;
import com.hchyun.common.constant.ReturnConstants; import com.hchyun.common.constant.ReturnConstants;
import com.hchyun.common.core.controller.HcyBaseController; import com.hchyun.common.core.controller.HcyBaseController;
import com.hchyun.common.utils.ServerResult; import com.hchyun.common.utils.ServerResult;
import com.hchyun.system.dto.FileDownload;
import com.hchyun.system.entity.SysFile;
import com.hchyun.system.utils.FtpUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -27,18 +34,20 @@ import org.springframework.web.bind.annotation.RestController;
import com.hchyun.common.annotation.Log; import com.hchyun.common.annotation.Log;
import com.hchyun.common.core.entity.AjaxResult; import com.hchyun.common.core.entity.AjaxResult;
import com.hchyun.common.enums.BusinessType; import com.hchyun.common.enums.BusinessType;
import com.hchyun.system.entity.File;
import com.hchyun.system.service.FileService; import com.hchyun.system.service.FileService;
import com.hchyun.common.utils.poi.ExcelUtil; import com.hchyun.common.utils.poi.ExcelUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* 文件信息Controller * 文件信息Controller
* *
* @author hchyun * @author hchyun
* @date 2021-02-17 * @date 2021-02-17
*/ */
@Api(value = "文件信息管理",tags = "文件信息管理") @Api(value = "文件信息管理", tags = "文件信息管理")
@RestController @RestController
@RequestMapping("/system/file") @RequestMapping("/system/file")
public class FileController extends HcyBaseController { public class FileController extends HcyBaseController {
@ -50,13 +59,12 @@ public class FileController extends HcyBaseController {
/** /**
* 查询文件信息列表 * 查询文件信息列表
*/ */
@ApiOperation("查询文件信息列表")
@PreAuthorize("@ss.hasPermi('system:file:list')") @PreAuthorize("@ss.hasPermi('system:file:list')")
@PutMapping("/list") @PutMapping("/list")
public Serializable list(@Validated @RequestBody File file) { public Serializable list(@Validated @RequestBody SysFile sysFile) {
try { try {
startPage(file.getParams()); startPage(sysFile.getParams());
ServerResult<List<File>> serverResult = fileService.selectFileList(file); ServerResult<List<SysFile>> serverResult = fileService.selectFileList(sysFile);
if (serverResult.isStart()) { if (serverResult.isStart()) {
return getDataTable(serverResult.getData()); return getDataTable(serverResult.getData());
} else { } else {
@ -71,14 +79,13 @@ public class FileController extends HcyBaseController {
/** /**
* 导出文件信息列表 * 导出文件信息列表
*/ */
@ApiOperation("导出文件信息列表")
@PreAuthorize("@ss.hasPermi('system:file:export')") @PreAuthorize("@ss.hasPermi('system:file:export')")
@Log(title = "文件信息", businessType = BusinessType.EXPORT) @Log(title = "文件信息", businessType = BusinessType.EXPORT)
@PutMapping("/export") @PutMapping("/export")
public AjaxResult export(@Validated @RequestBody File file) { public AjaxResult export(@Validated @RequestBody SysFile sysFile) {
try { try {
ServerResult<List<File>> serverResult = fileService.selectFileList(file); ServerResult<List<SysFile>> serverResult = fileService.selectFileList(sysFile);
ExcelUtil<File> util = new ExcelUtil<File>(File. class); ExcelUtil<SysFile> util = new ExcelUtil<SysFile>(SysFile.class);
if (serverResult.isStart()) { if (serverResult.isStart()) {
return util.exportExcel(serverResult.getData(), "file"); return util.exportExcel(serverResult.getData(), "file");
} else { } else {
@ -93,13 +100,11 @@ public class FileController extends HcyBaseController {
/** /**
* 获取文件信息详细信息 * 获取文件信息详细信息
*/ */
@ApiOperation("获取文件信息详细信息")
@ApiImplicitParam(name = "fileId" , value = "文件信息fileId" , required = true, dataType = "Long" , paramType = "path")
@PreAuthorize("@ss.hasPermi('system:file:query')") @PreAuthorize("@ss.hasPermi('system:file:query')")
@GetMapping(value = "/{fileId}") @GetMapping(value = "/{fileId}")
public AjaxResult getInfo(@PathVariable("fileId") Long fileId) { public AjaxResult getInfo(@PathVariable("fileId") Long fileId) {
try { try {
ServerResult<File> serverResult = fileService.selectFileById(fileId); ServerResult<SysFile> serverResult = fileService.selectFileById(fileId);
if (serverResult.isStart()) { if (serverResult.isStart()) {
return AjaxResult.success(serverResult.getData()); return AjaxResult.success(serverResult.getData());
} else { } else {
@ -114,16 +119,21 @@ public class FileController extends HcyBaseController {
/** /**
* 新增文件信息 * 新增文件信息
*/ */
@ApiOperation("新增文件信息")
@ApiImplicitParam(name = "file" , value = "新增文件信息信息" , dataType = "File")
@PreAuthorize("@ss.hasPermi('system:file:add')") @PreAuthorize("@ss.hasPermi('system:file:add')")
@Log(title = "文件信息", businessType = BusinessType.INSERT) @Log(title = "文件信息", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@RequestBody File file) { public AjaxResult add(@RequestBody SysFile sysFile) {
try { try {
ServerResult<Integer> serverResult = fileService.insertFile(file); Map<String, String> modeMap = new HashMap<>();
ServerResult<SysFile> serverResult = fileService.insertFile(sysFile);
if (serverResult.isStart()) { if (serverResult.isStart()) {
return AjaxResult.success(); if (sysFile.getIsPublic().equals("1")) {
String fileUrl = FtpUtils.getResources() + sysFile.getFileAddr().substring(FtpUtils.getPubfiles().length()) + "/" + sysFile.getMapping();
modeMap.put("url", fileUrl);
}
String filrUri = sysFile.getFileAddr() + "/" + sysFile.getMapping();
modeMap.put("uri", filrUri);
return AjaxResult.success(modeMap);
} else { } else {
return AjaxResult.error(serverResult.getMsg()); return AjaxResult.error(serverResult.getMsg());
} }
@ -136,15 +146,13 @@ public class FileController extends HcyBaseController {
/** /**
* 修改文件信息 * 修改文件信息
*/ */
@ApiOperation("修改文件信息")
@ApiImplicitParam(name = "file" , value = "修改文件信息信息" , dataType = "File")
@PreAuthorize("@ss.hasPermi('system:file:edit')") @PreAuthorize("@ss.hasPermi('system:file:edit')")
@Log(title = "文件信息", businessType = BusinessType.UPDATE) @Log(title = "文件信息", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@RequestBody File file) { public AjaxResult edit(@RequestBody SysFile sysFile) {
try { try {
ServerResult<Integer> serverResult = fileService.updateFile(file); ServerResult<Integer> serverResult = fileService.updateFile(sysFile);
if (serverResult.isStart()) { if (serverResult.isStart()) {
return AjaxResult.success(); return AjaxResult.success();
} else { } else {
@ -159,14 +167,12 @@ public class FileController extends HcyBaseController {
/** /**
* 删除文件信息 * 删除文件信息
*/ */
@ApiOperation("删除文件信息")
@ApiImplicitParam(name = "fileIds" , value = "文件信息fileIds" , required = true, dataType = "Long" , paramType = "path")
@PreAuthorize("@ss.hasPermi('system:file:remove')") @PreAuthorize("@ss.hasPermi('system:file:remove')")
@Log(title = "文件信息", businessType = BusinessType.DELETE) @Log(title = "文件信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{fileIds}") @DeleteMapping("/{fileIds}")
public AjaxResult remove(@PathVariable Long[] fileIds) { public AjaxResult remove(@PathVariable Long[] fileIds) {
try { try {
if (fileIds.length<0){ if (fileIds.length < 0) {
return AjaxResult.error("id不能为空!"); return AjaxResult.error("id不能为空!");
} }
ServerResult<Integer> serverResult = fileService.deleteFileByIds(fileIds); ServerResult<Integer> serverResult = fileService.deleteFileByIds(fileIds);
@ -175,7 +181,22 @@ public class FileController extends HcyBaseController {
} else { } else {
return AjaxResult.error(serverResult.getMsg()); return AjaxResult.error(serverResult.getMsg());
} }
}catch (RuntimeException e){ } catch (RuntimeException e) {
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
@GetMapping("/download/{fileId}")
public AjaxResult download(@PathVariable Long fileId, HttpServletRequest request, HttpServletResponse response) {
try {
ServerResult<SysFile> serverResult = fileService.downloadFile(fileId);
if (serverResult.isStart()){
return AjaxResult.success(serverResult.getData().getFileName());
}else {
return AjaxResult.error(serverResult.getMsg());
}
} catch (RuntimeException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR); return AjaxResult.error(ReturnConstants.SYS_ERROR);
} }

View File

@ -14,6 +14,25 @@ hchyun:
addressEnabled: false addressEnabled: false
# 验证码类型 math 数组计算 char 字符验证 # 验证码类型 math 数组计算 char 字符验证
captchaType: math captchaType: math
ftp:
# ftp服务器ip地址
ftpAddress: 114.215.82.135
# 端口号
ftpPort: 21
# 用户名
ftpUsername: hcyftp
# 密码
ftpPassword: hcyftp@2020
# 字符集编码
encoding: UTF-8
# 资源域名末尾以/结尾
resources: http://download.hchyun.com/
# 公开目录
pubfiles: pubfiles
# 保护目录
prifiles: prifiles
# 开发环境配置 # 开发环境配置
server: server:

View File

@ -17,6 +17,13 @@
<dependencies> <dependencies>
<!-- FTP上传文件 -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7</version>
</dependency>
<!-- Spring框架基本的核心工具 --> <!-- Spring框架基本的核心工具 -->
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>

View File

@ -5,112 +5,111 @@ import org.springframework.stereotype.Component;
/** /**
* 读取项目相关配置 * 读取项目相关配置
* *
* @author hchyun * @author hchyun
*/ */
@Component @Component
@ConfigurationProperties(prefix = "hchyun") @ConfigurationProperties(prefix = "hchyun")
public class HchYunConfig //@ConfigurationProperties(prefix = "ftp.service")
{ public class HchYunConfig {
/** 项目名称 */ /**
* 项目名称
*/
private String name; private String name;
/** 版本 */ /**
* 版本
*/
private String version; private String version;
/** 版权年份 */ /**
* 版权年份
*/
private String copyrightYear; private String copyrightYear;
/** 实例演示开关 */ /**
* 实例演示开关
*/
private boolean demoEnabled; private boolean demoEnabled;
/** 上传路径 */ /**
* 上传路径
*/
private static String profile; private static String profile;
/** 获取地址开关 */ /**
* 获取地址开关
*/
private static boolean addressEnabled; private static boolean addressEnabled;
public String getName() public String getName() {
{
return name; return name;
} }
public void setName(String name) public void setName(String name) {
{
this.name = name; this.name = name;
} }
public String getVersion() public String getVersion() {
{
return version; return version;
} }
public void setVersion(String version) public void setVersion(String version) {
{
this.version = version; this.version = version;
} }
public String getCopyrightYear() public String getCopyrightYear() {
{
return copyrightYear; return copyrightYear;
} }
public void setCopyrightYear(String copyrightYear) public void setCopyrightYear(String copyrightYear) {
{
this.copyrightYear = copyrightYear; this.copyrightYear = copyrightYear;
} }
public boolean isDemoEnabled() public boolean isDemoEnabled() {
{
return demoEnabled; return demoEnabled;
} }
public void setDemoEnabled(boolean demoEnabled) public void setDemoEnabled(boolean demoEnabled) {
{
this.demoEnabled = demoEnabled; this.demoEnabled = demoEnabled;
} }
public static String getProfile() public static String getProfile() {
{
return profile; return profile;
} }
public void setProfile(String profile) public void setProfile(String profile) {
{
HchYunConfig.profile = profile; HchYunConfig.profile = profile;
} }
public static boolean isAddressEnabled() public static boolean isAddressEnabled() {
{
return addressEnabled; return addressEnabled;
} }
public void setAddressEnabled(boolean addressEnabled) public void setAddressEnabled(boolean addressEnabled) {
{
HchYunConfig.addressEnabled = addressEnabled; HchYunConfig.addressEnabled = addressEnabled;
} }
/** /**
* 获取头像上传路径 * 获取头像上传路径
*/ */
public static String getAvatarPath() public static String getAvatarPath() {
{
return getProfile() + "/avatar"; return getProfile() + "/avatar";
} }
/** /**
* 获取下载路径 * 获取下载路径
*/ */
public static String getDownloadPath() public static String getDownloadPath() {
{
return getProfile() + "/download/"; return getProfile() + "/download/";
} }
/** /**
* 获取上传路径 * 获取上传路径
*/ */
public static String getUploadPath() public static String getUploadPath() {
{
return getProfile() + "/upload"; return getProfile() + "/upload";
} }
} }

View File

@ -11,63 +11,46 @@ import javax.servlet.http.HttpServletRequest;
/** /**
* 文件处理工具类 * 文件处理工具类
* *
* @author hchyun * @author hchyun
*/ */
public class FileUtils extends org.apache.commons.io.FileUtils public class FileUtils extends org.apache.commons.io.FileUtils {
{
public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
/** /**
* 输出指定文件的byte数组 * 输出指定文件的byte数组
* *
* @param filePath 文件路径 * @param filePath 文件路径
* @param os 输出流 * @param os 输出流
* @return * @return
*/ */
public static void writeBytes(String filePath, OutputStream os) throws IOException public static void writeBytes(String filePath, OutputStream os) throws IOException {
{
FileInputStream fis = null; FileInputStream fis = null;
try try {
{
File file = new File(filePath); File file = new File(filePath);
if (!file.exists()) if (!file.exists()) {
{
throw new FileNotFoundException(filePath); throw new FileNotFoundException(filePath);
} }
fis = new FileInputStream(file); fis = new FileInputStream(file);
byte[] b = new byte[1024]; byte[] b = new byte[1024];
int length; int length;
while ((length = fis.read(b)) > 0) while ((length = fis.read(b)) > 0) {
{
os.write(b, 0, length); os.write(b, 0, length);
} }
} } catch (IOException e) {
catch (IOException e)
{
throw e; throw e;
} } finally {
finally if (os != null) {
{ try {
if (os != null)
{
try
{
os.close(); os.close();
} } catch (IOException e1) {
catch (IOException e1)
{
e1.printStackTrace(); e1.printStackTrace();
} }
} }
if (fis != null) if (fis != null) {
{ try {
try
{
fis.close(); fis.close();
} } catch (IOException e1) {
catch (IOException e1)
{
e1.printStackTrace(); e1.printStackTrace();
} }
} }
@ -76,17 +59,15 @@ public class FileUtils extends org.apache.commons.io.FileUtils
/** /**
* 删除文件 * 删除文件
* *
* @param filePath 文件 * @param filePath 文件
* @return * @return
*/ */
public static boolean deleteFile(String filePath) public static boolean deleteFile(String filePath) {
{
boolean flag = false; boolean flag = false;
File file = new File(filePath); File file = new File(filePath);
// 路径为文件且不为空则进行删除 // 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) if (file.isFile() && file.exists()) {
{
file.delete(); file.delete();
flag = true; flag = true;
} }
@ -95,45 +76,36 @@ public class FileUtils extends org.apache.commons.io.FileUtils
/** /**
* 文件名称验证 * 文件名称验证
* *
* @param filename 文件名称 * @param filename 文件名称
* @return true 正常 false 非法 * @return true 正常 false 非法
*/ */
public static boolean isValidFilename(String filename) public static boolean isValidFilename(String filename) {
{
return filename.matches(FILENAME_PATTERN); return filename.matches(FILENAME_PATTERN);
} }
/** /**
* 下载文件名重新编码 * 下载文件名重新编码
* *
* @param request 请求对象 * @param request 请求对象
* @param fileName 文件名 * @param fileName 文件名
* @return 编码后的文件名 * @return 编码后的文件名
*/ */
public static String setFileDownloadHeader(HttpServletRequest request, String fileName) public static String setFileDownloadHeader(HttpServletRequest request, String fileName)
throws UnsupportedEncodingException throws UnsupportedEncodingException {
{
final String agent = request.getHeader("USER-AGENT"); final String agent = request.getHeader("USER-AGENT");
String filename = fileName; String filename = fileName;
if (agent.contains("MSIE")) if (agent.contains("MSIE")) {
{
// IE浏览器 // IE浏览器
filename = URLEncoder.encode(filename, "utf-8"); filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " "); filename = filename.replace("+", " ");
} } else if (agent.contains("Firefox")) {
else if (agent.contains("Firefox"))
{
// 火狐浏览器 // 火狐浏览器
filename = new String(fileName.getBytes(), "ISO8859-1"); filename = new String(fileName.getBytes(), "ISO8859-1");
} } else if (agent.contains("Chrome")) {
else if (agent.contains("Chrome"))
{
// google浏览器 // google浏览器
filename = URLEncoder.encode(filename, "utf-8"); filename = URLEncoder.encode(filename, "utf-8");
} } else {
else
{
// 其它浏览器 // 其它浏览器
filename = URLEncoder.encode(filename, "utf-8"); filename = URLEncoder.encode(filename, "utf-8");
} }

View File

@ -10,11 +10,10 @@ import com.hchyun.common.utils.http.HttpUtils;
/** /**
* 获取地址类 * 获取地址类
* *
* @author hchyun * @author hchyun
*/ */
public class AddressUtils public class AddressUtils {
{
private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);
// IP地址查询 // IP地址查询
@ -23,32 +22,25 @@ public class AddressUtils
// 未知地址 // 未知地址
public static final String UNKNOWN = "XX XX"; public static final String UNKNOWN = "XX XX";
public static String getRealAddressByIP(String ip) public static String getRealAddressByIP(String ip) {
{
String address = UNKNOWN; String address = UNKNOWN;
// 内网不查询 // 内网不查询
if (IpUtils.internalIp(ip)) if (IpUtils.internalIp(ip)) {
{
return "内网IP"; return "内网IP";
} }
if (HchYunConfig.isAddressEnabled()) if (HchYunConfig.isAddressEnabled()) {
{ try {
try String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true" , Constants.GBK);
{ if (StringUtils.isEmpty(rspStr)) {
String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); log.error("获取地理位置异常 {}" , ip);
if (StringUtils.isEmpty(rspStr))
{
log.error("获取地理位置异常 {}", ip);
return UNKNOWN; return UNKNOWN;
} }
JSONObject obj = JSONObject.parseObject(rspStr); JSONObject obj = JSONObject.parseObject(rspStr);
String region = obj.getString("pro"); String region = obj.getString("pro");
String city = obj.getString("city"); String city = obj.getString("city");
return String.format("%s %s", region, city); return String.format("%s %s" , region, city);
} } catch (Exception e) {
catch (Exception e) log.error("获取地理位置异常 {}" , ip);
{
log.error("获取地理位置异常 {}", ip);
} }
} }
return address; return address;

View File

@ -111,6 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/*/api-docs").anonymous() .antMatchers("/*/api-docs").anonymous()
.antMatchers("/druid/**").anonymous() .antMatchers("/druid/**").anonymous()
.antMatchers("/tests/**").anonymous() .antMatchers("/tests/**").anonymous()
.antMatchers("/system/file/download/**").anonymous()
// 除上面外的所有请求全部需要鉴权认证 // 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated() .anyRequest().authenticated()
.and() .and()

View File

@ -19,20 +19,18 @@ import com.hchyun.common.utils.StringUtils;
/** /**
* 全局异常处理器 * 全局异常处理器
* *
* @author hchyun * @author hchyun
*/ */
@RestControllerAdvice @RestControllerAdvice
public class GlobalExceptionHandler public class GlobalExceptionHandler {
{
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/** /**
* 基础异常 * 基础异常
*/ */
@ExceptionHandler(BaseException.class) @ExceptionHandler(BaseException.class)
public AjaxResult baseException(BaseException e) public AjaxResult baseException(BaseException e) {
{
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
} }
@ -40,46 +38,39 @@ public class GlobalExceptionHandler
* 业务异常 * 业务异常
*/ */
@ExceptionHandler(CustomException.class) @ExceptionHandler(CustomException.class)
public AjaxResult businessException(CustomException e) public AjaxResult businessException(CustomException e) {
{ if (StringUtils.isNull(e.getCode())) {
if (StringUtils.isNull(e.getCode()))
{
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
} }
return AjaxResult.error(e.getCode(), e.getMessage()); return AjaxResult.error(e.getCode(), e.getMessage());
} }
@ExceptionHandler(NoHandlerFoundException.class) @ExceptionHandler(NoHandlerFoundException.class)
public AjaxResult handlerNoFoundException(Exception e) public AjaxResult handlerNoFoundException(Exception e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return AjaxResult.error(HttpStatus.NOT_FOUND, "路径不存在,请检查路径是否正确"); return AjaxResult.error(HttpStatus.NOT_FOUND, "路径不存在,请检查路径是否正确");
} }
@ExceptionHandler(AccessDeniedException.class) @ExceptionHandler(AccessDeniedException.class)
public AjaxResult handleAuthorizationException(AccessDeniedException e) public AjaxResult handleAuthorizationException(AccessDeniedException e) {
{
log.error(e.getMessage()); log.error(e.getMessage());
return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权"); return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权");
} }
@ExceptionHandler(AccountExpiredException.class) @ExceptionHandler(AccountExpiredException.class)
public AjaxResult handleAccountExpiredException(AccountExpiredException e) public AjaxResult handleAccountExpiredException(AccountExpiredException e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
} }
@ExceptionHandler(UsernameNotFoundException.class) @ExceptionHandler(UsernameNotFoundException.class)
public AjaxResult handleUsernameNotFoundException(UsernameNotFoundException e) public AjaxResult handleUsernameNotFoundException(UsernameNotFoundException e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
} }
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
public AjaxResult handleException(Exception e) public AjaxResult handleException(Exception e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
} }
@ -88,8 +79,7 @@ public class GlobalExceptionHandler
* 自定义验证异常 * 自定义验证异常
*/ */
@ExceptionHandler(BindException.class) @ExceptionHandler(BindException.class)
public AjaxResult validatedBindException(BindException e) public AjaxResult validatedBindException(BindException e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
String message = e.getAllErrors().get(0).getDefaultMessage(); String message = e.getAllErrors().get(0).getDefaultMessage();
return AjaxResult.error(message); return AjaxResult.error(message);
@ -99,8 +89,7 @@ public class GlobalExceptionHandler
* 自定义验证异常 * 自定义验证异常
*/ */
@ExceptionHandler(MethodArgumentNotValidException.class) @ExceptionHandler(MethodArgumentNotValidException.class)
public Object validExceptionHandler(MethodArgumentNotValidException e) public Object validExceptionHandler(MethodArgumentNotValidException e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
String message = e.getBindingResult().getFieldError().getDefaultMessage(); String message = e.getBindingResult().getFieldError().getDefaultMessage();
return AjaxResult.error(message); return AjaxResult.error(message);
@ -110,8 +99,7 @@ public class GlobalExceptionHandler
* 演示模式异常 * 演示模式异常
*/ */
@ExceptionHandler(DemoModeException.class) @ExceptionHandler(DemoModeException.class)
public AjaxResult demoModeException(DemoModeException e) public AjaxResult demoModeException(DemoModeException e) {
{
return AjaxResult.error("演示模式,不允许操作"); return AjaxResult.error("演示模式,不允许操作");
} }
} }

View File

@ -1,52 +1,51 @@
package com.hchyun.system.dao; package com.hchyun.system.dao;
import java.util.List; import java.util.List;
import java.util.Map;
import com.hchyun.system.entity.File; import com.hchyun.system.entity.SysFile;
/** /**
* 文件信息Mapper接口 * 文件信息Mapper接口
* *
* @author hchyun * @author hchyun
* @date 2021-02-17 * @date 2021-02-17
*/ */
public interface FileDao { public interface FileDao {
/** /**
* 查询文件信息 * 查询文件信息
* *
* @param fileId 文件信息ID * @param fileId 文件信息ID
* @return 文件信息 * @return 文件信息
*/ */
File selectFileById(Long fileId); SysFile selectFileById(Long fileId);
/** /**
* 查询文件信息列表 * 查询文件信息列表
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 文件信息集合 * @return 文件信息集合
*/ */
List<File> selectFileList(File file); List<SysFile> selectFileList(SysFile sysFile);
/** /**
* 新增文件信息 * 新增文件信息
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 结果 * @return 结果
*/ */
int insertFile(File file); int insertFile(SysFile sysFile);
/** /**
* 修改文件信息 * 修改文件信息
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 结果 * @return 结果
*/ */
int updateFile(File file); int updateFile(SysFile sysFile);
/** /**
* 删除文件信息 * 删除文件信息
* *
* @param fileId 文件信息ID * @param fileId 文件信息ID
* @return 结果 * @return 结果
*/ */
@ -54,7 +53,7 @@ public interface FileDao {
/** /**
* 批量删除文件信息 * 批量删除文件信息
* *
* @param fileIds 需要删除的数据ID * @param fileIds 需要删除的数据ID
* @return 结果 * @return 结果
*/ */

View File

@ -0,0 +1,29 @@
package com.hchyun.system.dto;
import java.io.InputStream;
public class FileDownload {
private String fileName;
private InputStream inputStream;
public FileDownload(String fileName, InputStream inputStream) {
this.fileName = fileName;
this.inputStream = inputStream;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
}

View File

@ -14,7 +14,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
* @date 2021-02-17 * @date 2021-02-17
*/ */
@ApiModel("文件信息") @ApiModel("文件信息")
public class File extends BaseEntity { public class SysFile extends BaseEntity {
/** /**
* 文件id * 文件id
@ -59,7 +59,7 @@ public class File extends BaseEntity {
*/ */
@Excel(name = "文件大小(MB)") @Excel(name = "文件大小(MB)")
@ApiModelProperty("文件大小(MB)") @ApiModelProperty("文件大小(MB)")
private String fileSize; private Long fileSize;
/** /**
* 是否公开 * 是否公开
*/ */
@ -68,6 +68,7 @@ public class File extends BaseEntity {
private String isPublic; private String isPublic;
public void setFileId(Long fileId) { public void setFileId(Long fileId) {
this.fileId = fileId; this.fileId = fileId;
} }
@ -124,12 +125,12 @@ public class File extends BaseEntity {
return fileType; return fileType;
} }
public void setFileSize(String fileSize) { public Long getFileSize() {
this.fileSize = fileSize; return fileSize;
} }
public String getFileSize() { public void setFileSize(Long fileSize) {
return fileSize; this.fileSize = fileSize;
} }
public void setIsPublic(String isPublic) { public void setIsPublic(String isPublic) {

View File

@ -1,10 +1,9 @@
package com.hchyun.system.service; package com.hchyun.system.service;
import java.util.List; import java.util.List;
import java.util.Map;
import com.hchyun.common.utils.ServerResult; import com.hchyun.common.utils.ServerResult;
import com.hchyun.system.entity.File; import com.hchyun.system.entity.SysFile;
/** /**
* 文件信息Service接口 * 文件信息Service接口
@ -19,31 +18,31 @@ public interface FileService {
* @param fileId 文件信息ID * @param fileId 文件信息ID
* @return 文件信息 * @return 文件信息
*/ */
ServerResult<File> selectFileById(Long fileId); ServerResult<SysFile> selectFileById(Long fileId);
/** /**
* 查询文件信息列表 * 查询文件信息列表
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 文件信息集合 * @return 文件信息集合
*/ */
ServerResult<List<File>> selectFileList(File file); ServerResult<List<SysFile>> selectFileList(SysFile sysFile);
/** /**
* 新增文件信息 * 新增文件信息
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 结果 * @return 结果
*/ */
ServerResult<Integer> insertFile(File file); ServerResult<SysFile> insertFile(SysFile sysFile);
/** /**
* 修改文件信息 * 修改文件信息
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 结果 * @return 结果
*/ */
ServerResult<Integer> updateFile(File file); ServerResult<Integer> updateFile(SysFile sysFile);
/** /**
* 批量删除文件信息 * 批量删除文件信息
@ -61,4 +60,11 @@ public interface FileService {
*/ */
ServerResult<Integer> deleteFileById(Long fileId); ServerResult<Integer> deleteFileById(Long fileId);
/**
* 下载指定文件
* @param fileId
* @return
*/
ServerResult<SysFile> downloadFile(Long fileId);
} }

View File

@ -1,20 +1,18 @@
package com.hchyun.system.service.impl; package com.hchyun.system.service.impl;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import com.hchyun.common.constant.ReturnConstants; import com.hchyun.common.constant.ReturnConstants;
import com.hchyun.common.utils.SecurityUtils; import com.hchyun.common.utils.SecurityUtils;
import com.hchyun.common.utils.DateUtils;
import com.hchyun.common.utils.SecurityUtils;
import com.hchyun.common.utils.DateUtils;
import com.hchyun.common.utils.ServerResult; import com.hchyun.common.utils.ServerResult;
import com.hchyun.system.entity.SysFile;
import com.hchyun.system.utils.FtpUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.hchyun.system.dao.FileDao; import com.hchyun.system.dao.FileDao;
import com.hchyun.system.entity.File;
import com.hchyun.system.service.FileService; import com.hchyun.system.service.FileService;
/** /**
@ -37,74 +35,78 @@ public class FileServiceImpl implements FileService {
* @return 文件信息 * @return 文件信息
*/ */
@Override @Override
public ServerResult<File> selectFileById(Long fileId) { public ServerResult<SysFile> selectFileById(Long fileId) {
try { try {
File file = fileDao.selectFileById(fileId); SysFile sysFile = fileDao.selectFileById(fileId);
if (file != null){ if (sysFile != null){
return new ServerResult<File>(true,file); return new ServerResult<SysFile>(true, sysFile);
}else { }else {
return new ServerResult<File>(false, ReturnConstants.RESULT_EMPTY); return new ServerResult<SysFile>(false, ReturnConstants.RESULT_EMPTY);
} }
}catch (RuntimeException e){ }catch (RuntimeException e){
logger.error(e.getMessage()); logger.error(e.getMessage());
return new ServerResult<File>(false,ReturnConstants.DB_EX); return new ServerResult<SysFile>(false,ReturnConstants.DB_EX);
} }
} }
/** /**
* 查询文件信息列表 * 查询文件信息列表
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 文件信息 * @return 文件信息
*/ */
@Override @Override
public ServerResult<List<File>> selectFileList(File file) { public ServerResult<List<SysFile>> selectFileList(SysFile sysFile) {
try { try {
List<File> fileList = fileDao.selectFileList(file); List<SysFile> sysFileList = fileDao.selectFileList(sysFile);
if (fileList.size()>0){ if (sysFileList.size()>0){
return new ServerResult<List<File>>(true,fileList); return new ServerResult<List<SysFile>>(true, sysFileList);
}else { }else {
return new ServerResult<List<File>>(false,ReturnConstants.RESULT_EMPTY); return new ServerResult<List<SysFile>>(false,ReturnConstants.RESULT_EMPTY);
} }
}catch (RuntimeException e){ }catch (RuntimeException e){
logger.error(e.getMessage()); logger.error(e.getMessage());
return new ServerResult<List<File>>(false,ReturnConstants.DB_EX); return new ServerResult<List<SysFile>>(false,ReturnConstants.DB_EX);
} }
} }
/** /**
* 新增文件信息 * 新增文件信息
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 结果 * @return 结果
*/ */
@Override @Override
public ServerResult<Integer> insertFile(File file) { public ServerResult<SysFile> insertFile(SysFile sysFile) {
try { try {
file.setCreateBy(SecurityUtils.getUserId()); sysFile.setCreateBy(SecurityUtils.getUserId());
Integer renewal = fileDao.insertFile(file); sysFile = FtpUtils.uploadFtp(sysFile);
if (sysFile == null){
return new ServerResult<>(false,"文件上传失败!");
}
Integer renewal = fileDao.insertFile(sysFile);
if (renewal >0){ if (renewal >0){
return new ServerResult<Integer>(true,renewal); return new ServerResult<>(true,sysFile);
}else { }else {
return new ServerResult<Integer>(false,ReturnConstants.SYS_FAILL); return new ServerResult<>(false,ReturnConstants.SYS_FAILL);
} }
}catch (RuntimeException e){ }catch (RuntimeException e){
logger.error(e.getMessage()); logger.error(e.getMessage());
return new ServerResult<Integer>(false,ReturnConstants.DB_EX); return new ServerResult<>(false,ReturnConstants.DB_EX);
} }
} }
/** /**
* 修改文件信息 * 修改文件信息
* *
* @param file 文件信息 * @param sysFile 文件信息
* @return 结果 * @return 结果
*/ */
@Override @Override
public ServerResult<Integer> updateFile(File file) { public ServerResult<Integer> updateFile(SysFile sysFile) {
try { try {
file.setUpdateBy(SecurityUtils.getUserId()); sysFile.setUpdateBy(SecurityUtils.getUserId());
Integer renewal = fileDao.updateFile(file); Integer renewal = fileDao.updateFile(sysFile);
if (renewal >0){ if (renewal >0){
return new ServerResult<Integer>(true,renewal); return new ServerResult<Integer>(true,renewal);
}else { }else {
@ -125,6 +127,15 @@ public class FileServiceImpl implements FileService {
@Override @Override
public ServerResult<Integer> deleteFileByIds(Long[] fileIds) { public ServerResult<Integer> deleteFileByIds(Long[] fileIds) {
try { try {
List<SysFile> sysFiles = new ArrayList<>();
SysFile sysFile = null;
for (Long fileId : fileIds) {
sysFile = fileDao.selectFileById(fileId);
sysFiles.add(sysFile);
}
if (!FtpUtils.deleteFile(sysFiles)){
return new ServerResult<>(false,ReturnConstants.OP_ERROR);
}
Integer renewal = fileDao.deleteFileByIds(fileIds); Integer renewal = fileDao.deleteFileByIds(fileIds);
if (renewal >0){ if (renewal >0){
return new ServerResult<Integer>(true,renewal); return new ServerResult<Integer>(true,renewal);
@ -137,6 +148,22 @@ public class FileServiceImpl implements FileService {
} }
} }
@Override
public ServerResult<SysFile> downloadFile(Long fileId) {
try {
SysFile sysFile = fileDao.selectFileById(fileId);
String fileName = FtpUtils.downloadFile(sysFile);
if (fileName==null){
return new ServerResult<>(false,"文件下载失败!");
}else {
return new ServerResult<>(true,sysFile);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<>(false,ReturnConstants.DB_EX);
}
}
/** /**
* 删除文件信息信息 * 删除文件信息信息
* *

View File

@ -0,0 +1,278 @@
package com.hchyun.system.utils;
import com.hchyun.common.config.HchYunConfig;
import com.hchyun.common.utils.DateUtils;
import com.hchyun.common.utils.file.FileUtils;
import com.hchyun.common.utils.uuid.IdUtils;
import com.hchyun.system.dto.FileDownload;
import com.hchyun.system.entity.SysFile;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.io.*;
import java.util.List;
/**
* @Author 18209
* @Date 2021/2/18 15:34
* @Version 1.0
*/
@Component
@ConfigurationProperties(prefix = "ftp")
public class FtpUtils {
private static Logger logger = LoggerFactory.getLogger(FtpUtils.class);
private static String baseDir = "/profile";
private static String ftpDir = "/profile/upload";
private static String pubfiles;
private static String prifiles;
public static String getPubfiles() {
return pubfiles;
}
//ftp服务器ip地址
private static String ftpAddress;
//端口号
private static int ftpPort;
//用户名
private static String ftpUsername;
//密码
private static String ftpPassword;
//字符集编码
private static String encoding;
//静态资源域名
private static String resources;
public void setPubfiles(String pubfiles) {
FtpUtils.pubfiles = pubfiles + "/";
}
public void setPrifiles(String prifiles) {
FtpUtils.prifiles = prifiles +"/";
}
public static String getResources() {
return resources;
}
public void setResources(String resources) {
FtpUtils.resources = resources;
}
public void setFtpAddress(String ftpAddress) {
FtpUtils.ftpAddress = ftpAddress;
}
public void setFtpPort(int ftpPort) {
FtpUtils.ftpPort = ftpPort;
}
public void setFtpUsername(String ftpUsername) {
FtpUtils.ftpUsername = ftpUsername;
}
public void setFtpPassword(String ftpPassword) {
FtpUtils.ftpPassword = ftpPassword;
}
public void setEncoding(String encoding) {
FtpUtils.encoding = encoding;
}
/**
* 上传文件
* @param sysFile
* @return
*/
public static SysFile uploadFtp(SysFile sysFile) {
String dir = HchYunConfig.getProfile() + sysFile.getFileAddr().substring(baseDir.length());
String ftpdir = "";
if (sysFile.getIsPublic().equals("1")) {
ftpdir += pubfiles;
} else {
ftpdir += prifiles;
}
ftpdir +=DateUtils.datePath();
File file = new File(dir);
sysFile.setFileName(file.getName());
sysFile.setFileSize(file.length() / 1024 / 1024);
sysFile.setMapping(IdUtils.fastUUID() +"."+ getExtension(file.getName()));
sysFile.setFileAddr(ftpdir);
sysFile.setFileType(getExtension(file.getName()));
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
FTPClient ftpClient = linkFtp();
if (ftpClient == null) {
return null;
}
try {
String[] basePathList = ftpdir.split("/");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
for (int i = 0; i < basePathList.length; i++) {
if (!ftpClient.changeWorkingDirectory(basePathList[i])) {
ftpClient.makeDirectory(basePathList[i]);//创建文件夹
ftpClient.changeWorkingDirectory(basePathList[i]);//改变目录
}
}
ftpClient.enterLocalPassiveMode();
ftpClient.storeFile(sysFile.getMapping(), inputStream);
inputStream.close();
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
}
if (!FileUtils.deleteFile(dir)){
return null;
}
return sysFile;
}
/**
* ftp下载文件
*
* @param sysFile
* @return
*/
public static String downloadFile(SysFile sysFile) {
String[] basePathList = sysFile.getFileAddr().split("/");
FTPClient ftpClient = linkFtp();
try {
if (ftpClient == null) {
return null;
}
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
//设置linux ftp服务器
FTPClientConfig conf = new FTPClientConfig( FTPClientConfig.SYST_UNIX);
ftpClient.configure(conf);
//设置访问被动模式
ftpClient.setRemoteVerificationEnabled(false);
ftpClient.enterLocalPassiveMode();
for (int i = 0; i < basePathList.length; i++) {
ftpClient.changeWorkingDirectory(basePathList[i]);//改变目录
}
// FTPFile[] ftpFiles = ftpClient.listFiles(articleFile.getFileName());
// if (ftpFiles == null || ftpFiles.length == 0) {
// logger.error("远程文件不存在");
// return null;
// } else if (ftpFiles.length > 1) {
// logger.error("远程文件是文件夹");
// return null;
// }
String fileDir = HchYunConfig.getDownloadPath()+sysFile.getFileName();
OutputStream os = new FileOutputStream(fileDir);
ftpClient.retrieveFile(sysFile.getMapping(), os);
return fileDir;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
/**
* ftp删除文件
* @param sysFileList
* @return
*/
public static boolean deleteFile(List<SysFile> sysFileList) {
FTPClient ftpClient = linkFtp();
boolean start = false;
try {
if (ftpClient == null) {
return false;
}
for (SysFile sysFile : sysFileList) {
String[] basePathList = sysFile.getFileAddr().split("/");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
ftpClient.enterLocalPassiveMode();
for (int i = 0; i < basePathList.length; i++) {
ftpClient.changeWorkingDirectory(basePathList[i]);//改变目录
}
start = ftpClient.deleteFile(sysFile.getMapping());
if (!start){
return false;
}
}
return true;
} catch (IOException e) {
e.printStackTrace();
logger.error("ftp删除文件出错:" + e.toString());
return false;
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* ftp服务器连接
*
* @return
*/
public static FTPClient linkFtp() {
FTPClient ftpClient = new FTPClient();//实例FTP客户端
ftpClient.enterLocalPassiveMode();
ftpClient.setAutodetectUTF8(true);
// 保存FTP控制连接使用的字符集必须在连接前设置
ftpClient.setControlEncoding(encoding);
try {
ftpClient.connect(ftpAddress, ftpPort);//连接FTP服务器
ftpClient.login(ftpUsername, ftpPassword);//用户名密码登录
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
logger.error("未连接到FTP用户名或密码错误。");
ftpClient.disconnect();
return null;
} else {
logger.info("FTP连接成功");
return ftpClient;
}
} catch (IOException e) {
logger.error("FTP登录失败" + e.getMessage());
e.printStackTrace();
try {
ftpClient.disconnect();
} catch (IOException ioException) {
ioException.printStackTrace();
}
return null;
}
}
public static final String getExtension(String fileName) {
return FilenameUtils.getExtension(fileName);
}
}

View File

@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hchyun.system.dao.FileDao"> <mapper namespace="com.hchyun.system.dao.FileDao">
<resultMap type="com.hchyun.system.entity.File" id="FileResult"> <resultMap type="com.hchyun.system.entity.SysFile" id="FileResult">
<result property="fileId" column="file_id" /> <result property="fileId" column="file_id" />
<result property="pId" column="p_id" /> <result property="pId" column="p_id" />
<result property="roleIds" column="role_ids" /> <result property="roleIds" column="role_ids" />
@ -23,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectFileVo"> <sql id="selectFileVo">
select file_id, p_id, role_ids, file_name, mapping, file_addr, file_type, file_size, is_public, create_by, create_time, update_by, update_time from sys_file select file_id, p_id, role_ids, file_name, mapping, file_addr, file_type, file_size, is_public, create_by, create_time, update_by, update_time from sys_file
</sql> </sql>
<select id="selectFileList" parameterType="File" resultMap="FileResult"> <select id="selectFileList" parameterType="SysFile" resultMap="FileResult">
<include refid="selectFileVo"/> <include refid="selectFileVo"/>
<where> <where>
<if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if> <if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
@ -40,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<insert id="insertFile" parameterType="File" useGeneratedKeys="true" keyProperty="fileId"> <insert id="insertFile" parameterType="SysFile" useGeneratedKeys="true" keyProperty="fileId">
insert into sys_file insert into sys_file
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="pId != null">p_id,</if> <if test="pId != null">p_id,</if>
@ -68,7 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim> </trim>
</insert> </insert>
<update id="updateFile" parameterType="File"> <update id="updateFile" parameterType="SysFile">
update sys_file update sys_file
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="pId != null">p_id = #{pId},</if> <if test="pId != null">p_id = #{pId},</if>