[C#]如何透過程式寫入檔案至遠端的NFS資料夾中

[C#]如何透過程式寫入檔案至遠端的NFS資料夾中

在說明怎麼透過程式寫入到NFS資料夾之前,我想我必須先說明一下NFS是什麼

NFS資料夾對於程式設計師來說是很陌生的一個東西,但是網管時卻常常使用到

簡單來說,NFS就是一個被授權存取的遠端檔案伺服器資料夾

更簡單來說,就是一個"網路上的芳鄰"所分享的資料夾,只是運作模式又不太一樣

不過程式設計師只要知道這一點就夠了

想要知道NFS的詳細資料的話,可以Google一下

 

回到正題

因為這次公司導入負載平衡的網路設備

所以有一些進行檔案上傳的系統,因為無法只限定檔案上傳於本機之中

程式就必須搭配修改將上傳的檔案另外存放到NFS網路磁碟機裡

 

由於公司是使用Synology的NAS,所以我在這裡先把Synology的NFS設定先打開

1.啟用NFS服務

先到[控制台]中,於[Win/Mac/NFS]設定裡,將[啟動 NFS 服務]打勾

001

2.設定NFS存取的權限

由於NFS的設定,是指定IP作為擁有存取權限主機的方式作運作,所以要先將要存取這個NFS資料夾的主機IP加上去

如果將程式放在IIS主機上,那這裡的IP就必須加上IIS主機的IP才能存取

設定的方式可以從[控制台] => [共用資料夾] => 點選共用資料夾名稱 => [權限] => [NFS 權限]

加入時設定存取權限為可讀寫,Root squash設定為不調整,基本上用預設值就可以了

002

接下來就是程式的工作了,先到nekodrive上,下載NFSLibrary並加入參考

使用的方式可以參考網站上的說明

https://code.google.com/p/nekodrive/wiki/UseNFSDotNetLibrary

因為原作者提供的程式碼很少也很簡單,所以我稍微更改了一些東西

1.檢查NFS連線是否正常

    /// 
    /// 檢查NFS是否連線成功
    /// 
    private bool CheckNFS(out NFSClient nfs)
    {
        nfs = new NFSClient(NFSClient.NFSVersion.v2);
        nfs.Connect(IPAddress.Parse(strNFSServer));
        List devices = nfs.GetExportedDevices();
        return (devices.Count > 0) ? true : false;
    }

2.透過檔案上傳控制項上傳檔案至NFS的指定目錄下

        // 建立NFS連線
        NFSClient nfs;
        bool blCheckFileUpload = false;

        if (this.CheckNFS(out nfs))
        {
            List devices = nfs.GetExportedDevices();
            string strDestFilePath = strNFSFolder + @"\" + fupl.FileName;

            // Mount NFS磁碟機
            nfs.MountDevice(devices[0]);
            // 寫入檔案
            nfs.Write(strDestFilePath, fupl.PostedFile.InputStream);
            // 判斷檔案是否存在NFS磁碟機上
            blCheckFileUpload = nfs.FileExists(strDestFilePath);
            // Unmount NFS磁碟機
            nfs.UnMountDevice();
            // 中斷連線
            nfs.Disconnect();

            if (blCheckFileUpload)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "NFS", "alert('上傳成功');", true);
            else
                ScriptManager.RegisterStartupScript(this, this.GetType(), "NFSFail", "alert('上傳失敗');", true);
        }

目前使用測試出來的結果,若是檔案名稱有空白或是中文字,可能會有上傳發生錯誤的問題

過幾天多試一些方法再看看能不能解決吧

如果有興趣的人,可以下載附件檔案NFS.zip試試看嘍