文件先上传到web服务器,再在web服务器里面传送到单独的文件服务器上,在web服务器里面建一个表来保存文件路径便可。java
@Service public class UploadServiceImpl implements UploadService{ 文件服务器地址 @Value("${upload.file.url}") private String uploadUrl; @Value("webdav") private String uploadUsername; @Value("webdav") public String uploadPassword; @Override public FileInfo uploadFile(MultipartFile multipartFile) { //取到文件大小,若是超过指定范围的话就直接返回提醒错误 long size = multipartFile.getSize(); //获取文件名 String fileName = multipartFile.getOriginalFilename(); // 获取文件后缀,即文件类型 String fileExt = ""; if (fileName.contains(".")) { fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); } //设置MD5加密 String fileMD5 = md5File(multipartFile); //拼接文件路径:/后缀/年/月/日/md5/filename String saveUrl = "/" + fileExt + new SimpleDateFormat("/yyyy/MM/dd/").format(new Date()) + fileMD5 + "/" + multipartFile.getOriginalFilename(); String location = null; try { location = saveFile(multipartFile, saveUrl);//保存文件操做 } catch (Exception e) { e.printStackTrace(); } FileInfo fileInfo = new FileInfo(); fileInfo.setAbsoluteUrl(location); fileInfo.setRelativeUrl(saveUrl); fileInfo.setFileMd5(fileMD5); fileInfo.setFileName(fileName); fileInfo.setFileSize(String.valueOf(size)); fileInfo.setFileType(fileExt); fileInfo.setCreateAt(DateUtil.date2String(new Date(), DateUtil.DATE_TIME_FORMAT)); return fileInfo; } //MD5加密 private String md5File(MultipartFile multipartFile) { try { return MD5.md5(multipartFile.getBytes()); } catch (IOException e) { e.printStackTrace(); } return null; } private String saveFile(MultipartFile file, String savePath) throws Exception { // 上传文件,到文件服务器,uploadUrl是在config中配好的,就是给uploadUrl赋值,若是不用那么麻烦的话能够直接把url放进去:upload("http://192.168.102.11/test", uploadUsername, uploadPassword, savePath, file.getBytes()); upload(uploadUrl, uploadUsername/*那台服务器的用户名*/, uploadPassword/*那台服务器的密码*/, savePath, file.getBytes()); return append(uploadUrl, savePath); } public static void upload(String webDavServer, String webDavUser, String webDavPassword, String remotePath, byte[] bytes) throws IOException { if (!webDavServer.endsWith("/")) webDavServer += "/"; //链接服务器 HttpURL hrl = new HttpURL(webDavServer); hrl.setUserinfo(webDavUser, webDavPassword); WebdavResource wdr = new WebdavResource(hrl); //make directory if need StringBuffer ssdir = new StringBuffer(); // 去除最后一个文件名 StringTokenizer t = new StringTokenizer(remotePath.substring(0, remotePath.lastIndexOf("/")), "/"); while(t.hasMoreTokens()){ String sdir = t.nextToken(); ssdir.append(sdir+"/"); wdr.mkcolMethod(wdr.getPath() + ssdir ); } String remoteFile= wdr.getPath() + remotePath;//拼成绝对地址 boolean result = wdr.putMethod(remoteFile, bytes);//把文件写进去 checkArgument(result, "文件上传出错");//false时会报错,true则为成功 wdr.close();//最后关闭链接 } /** * 链接 URL * @param paths * @return */ public static String append(String... paths) { List<String> pathList = Lists.newArrayList(paths); PeekingIterator<String> iter = Iterators.peekingIterator(pathList.iterator()); StringBuilder urlBuilder = new StringBuilder(); while (iter.hasNext()) { String current = iter.next(); urlBuilder.append(current); if (!iter.hasNext()) { break; } if (current.endsWith("/") && iter.peek().startsWith("/")) { urlBuilder.deleteCharAt(urlBuilder.length() - 1); } else if (!current.endsWith("/") && !iter.peek().startsWith("/")) { urlBuilder.append("/"); } } return urlBuilder.toString(); } }
(未完待续)web
上传至ftp服务器代码以下服务器
public void testFtp1(){ //建立客户端对象 FTPClient ftp = new FTPClient(); InputStream local=null; try { //链接ftp服务器 ftp.connect("192.168.80.161", 21); //登陆 ftp.login("ftpuser", "1111"); //设置上传路径 String path="/home/ftpuser/image"; //检查上传路径是否存在 若是不存在返回false boolean flag = ftp.changeWorkingDirectory(path); if(!flag){ //建立上传的路径 该方法只能建立一级目录,在这里若是/home/ftpuser存在则可建立image ftp.makeDirectory(path); } //指定上传路径 ftp.changeWorkingDirectory(path); //指定上传文件的类型 二进制文件 ftp.setFileType(FTP.BINARY_FILE_TYPE); //读取本地文件 File file = new File("mm.jpg"); local = new FileInputStream(file); //第一个参数是文件名 ftp.storeFile(file.getName(), local); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { //关闭文件流 local.close(); //退出 ftp.logout(); //断开链接 ftp.disconnect(); } catch (IOException e) { e.printStackTrace(); } } }
还有个野路子:app
用nfs共享来实现ide
查看nfs是否安装ui
#rpm -qa | grep nfs加密
若没有则安装nfs包url
安装NFS(在网上一些文章上说要安装portmap,新的发布版本上已经不须要了)code
sudo yum install nfs-utilsorm
( 这里能够经过yum list|grep nfs* 来查看软件包里面是否有nfs相关的包)
安装完以后,能够是rpm -qa|grep nfs进行查看
写服务端配置文件,先mkdir /tmp/nfs_test
服务端/etc/exports文件的配置格式为:
NFS共享目录 NFS客户端地址1(参数1,参数2,参数3......) 客户端地址2(参数1,参数2,参数3......)
NFS共享目录 NFS客户端地址(参数1,参数2,参数3......)
在/etc/exports中添加:
<输出目录> [客户端1 选项(访问权限,用户映射,其余)] [客户端2 选项(访问权限,用户映射,其余)]
/tmp/nfs_test *(rw,no_root_squash,insecure)
启动
systemctl enable nfs-server.service
systemctl start nfs-server.service
看下是否启动了:
exportfs
showmount -e
showmount -a
在客户端 先安装 nfs设置开机自启动,而后mount到本地目录上
mount -t nfs 9.151.141.111:/tmp/nfs_test /mnt
而后能够在/mnt目录里写文件,建目录,copy文件等等,实际上都是在
服务器端/tmp/nfs_test里面进行的。
也能够将两台机器上的文件相互copy...作备份也方便。
unmount /mnt便可。