文件上傳(上傳至獨立的文件服務器)

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

相關文章
相關標籤/搜索