文件先上傳到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便可。