[C#]如何透過程式寫入檔案至遠端的NFS資料夾中
在說明怎麼透過程式寫入到NFS資料夾之前,我想我必須先說明一下NFS是什麼
NFS資料夾對於程式設計師來說是很陌生的一個東西,但是網管時卻常常使用到
簡單來說,NFS就是一個被授權存取的遠端檔案伺服器資料夾
更簡單來說,就是一個"網路上的芳鄰"所分享的資料夾,只是運作模式又不太一樣
不過程式設計師只要知道這一點就夠了
想要知道NFS的詳細資料的話,可以Google一下
回到正題
因為這次公司導入負載平衡的網路設備
所以有一些進行檔案上傳的系統,因為無法只限定檔案上傳於本機之中
程式就必須搭配修改將上傳的檔案另外存放到NFS網路磁碟機裡
由於公司是使用Synology的NAS,所以我在這裡先把Synology的NFS設定先打開
1.啟用NFS服務
先到[控制台]中,於[Win/Mac/NFS]設定裡,將[啟動 NFS 服務]打勾
2.設定NFS存取的權限
由於NFS的設定,是指定IP作為擁有存取權限主機的方式作運作,所以要先將要存取這個NFS資料夾的主機IP加上去
如果將程式放在IIS主機上,那這裡的IP就必須加上IIS主機的IP才能存取
設定的方式可以從[控制台] => [共用資料夾] => 點選共用資料夾名稱 => [權限] => [NFS 權限]
加入時設定存取權限為可讀寫,Root squash設定為不調整,基本上用預設值就可以了
接下來就是程式的工作了,先到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試試看嘍