如何把文件上傳到另一臺服務器

假定有兩臺服務器:A和B,其中A爲Web服務器(IP:192.123.1.1, 爲iis發佈程序的服務器 ),B爲文件服務器(IP: 192.123.2.2)html

  1. 在文件服務器B中某個磁盤下建立一個共享文件夾DocShare,同時在該服務器上建立一個用戶,如docUser, 並給此用戶分配共享文件夾的讀寫權限
  2. 在WEB服務器A中也建立同一個用戶,如 docUser, 同時密碼與B中的docUser必須保持一致。並將用戶docUser加入到IIS_WPG用戶組
  3. 建立一個新的應用程序池docPool, 並設置權限認證,輸入用戶名docUser及密碼。
  4. 將IIS發佈的程序其應用程序池設置爲docPool
  5. 在IIS發佈的程序根目錄下添加一個虛擬目錄,名稱爲files,虛擬目錄映射到服務器B的共享目錄路徑,如:\\192.123.2.2\DocShare 同時設置特定用戶訪問,輸入用戶名docUser,密碼。
  6. 在程序代碼中,設置文件的保存路徑爲 Server.MapPath(「files」) 即:虛擬目錄的路徑。

http://www.cnblogs.com/guangpeng/archive/2013/04/09/3009600.htmlweb

 


在程序部署上常常遇到一個問題,爲了安全,速度,通常都是把數據庫和程序分開放在不一樣的服務器.通常對外一臺服務器就夠了,其它若是想對外,經過這臺對外服務器就能夠實現.

剛不久在作一個項目遇到了一個問題,程序所在的服務器空間小,另外購置了一臺數據服務器(存儲數據庫及文件).程序裏多個地方用到了附件上傳,通常上傳文件都放在程序目錄下.可此次不同,要放在另一臺服務器.
開始時我以爲很簡單,只要創建網絡映射不就能夠了嗎?只要有足夠的權限,和操做本機盤有什麼區別呢?

之前也作過這方面,用的是.net winform彙總excel,當時一點問題都沒有.此次是webform,問題來了,程序根本找不到.
這下好了,想了好多方面仍是沒有解決,在網上也沒搜索到,因而在CSDN中發了請求帖,終於解決.
http://community.csdn.net/Expert/topic/5470/5470471.xml?temp=.5512812數據庫

摘要以下:瀏覽器

簡單的測試虛擬目錄設置是否正確!
假設A是你web站點的服務器 B是你要上傳文件的服務器
一、在B服務器上共享一個文件夾upload,並設置好權限 開設用戶test 密碼123456 並給予test對upload的寫入權限,同時在該文件夾裏放入一個簡單的頁面,隨便什麼都行,輸出幾個字母就能夠了【B服務器上的操做over】
二、在A服務器web站點下面創建一個虛擬目錄,默認加虛擬目錄的時候是沒得選擇其餘服務器的共享文件夾的,你先隨便選擇一個本地的路徑,創建好以後,點擊該虛擬目錄的屬性,在更改本地路徑的上面,有3個選擇,你選擇「另外一臺計算機上的共享」,接着設置網絡路徑,格式是這樣的:\\{服務器}\{共享名},{服務器}用IP來代替,{共享名}就是那個upload文件夾,填好以後點擊後面的「鏈接用戶」,輸入剛纔在B服務器上用戶test 和密碼123456(固然,簡單一點,你最好先測試一下,肯定A服務器能訪問B服務器共享的文件夾,若是A都不能訪問B的共享,那你先解決這個問題先,測試的方法很簡單,在瀏覽器裏輸入\\B服務器的IP\upload,若是能輸入用戶和密碼以後能看到你剛纔隨便建的那個文件,OK,共享是能夠訪問的)
三、虛擬目錄設置好了以後,你能夠測試一下,在A的web站點下面經過程序獲取一下虛擬目錄的路徑,若是是成功的,路徑應該是服務器B的IP+upload文件夾。
四、接下來的工做就是上傳文件了,這個時候你直接上傳應該都是能夠的,應該你剛纔已經輸入過訪問B服務器upload的賬號和密碼,也就是說A和B已經創建了信任鏈接,不過若是你重啓服務器,剛纔創建的鏈接也就不存在了。因此在A服務器web站點的Global.asax文件里加載一句話,讓A服務器站點啓動的時候就和B創建信任鏈接
System.Diagnostics.Process.Start("net.exe", "use \\\\B服務器的IP\\upload \"123456\" /user:\"test\"");  
上面的語句就是創建信任鏈接的,放在global.asax的好處就是站點啓動就創建鏈接,由於這種信任鏈接是可持續性的,不會象session同樣過時,只有在重啓A服務器的時候這種信任鏈接纔會消失。

不曉得你明白沒有?不過我能夠確定,這個是能夠實現的,由於我剛剛作過這塊。
後話:至於上傳到B服務器上的文件怎麼訪問,那就比較方便了。
一種方式:仍是經過A服務器web站點下面的虛擬目錄來訪問,這種狀況下,B服務器只是提供空間
另外一種方式:在B服務器上創建一個站點,指向該目錄,這樣B服務器分擔了訪問文件時IIS的工做任務

 

文件上傳保存:
SaveAs(Server.MapPath("abc") + "\\" + filePath.Substring(filePath.LastIndexOf("\\") + 1));
//abc爲程序運行站點或者虛擬目錄下的虛擬目錄

文件瀏覽:
DownloadFile(Server.MapPath("abc") + "//abc.txt");
//abc.txt爲B服務器上的文件安全

private void DownloadFile(string physicalFilePath)
        {
            FileStream stream = null;
            try
            {
                stream = new FileStream(physicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                int bufSize = (int)stream.Length;
                byte[] buf = new byte[bufSize];

                int bytesRead = stream.Read(buf, 0, bufSize);
                HttpContext.Current.Response.ContentType = "application/octet-stream";
                //attachment是以附件的形式下載,也能夠改成online在線找開. 
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(physicalFilePath), System.Text.Encoding.UTF8));
                HttpContext.Current.Response.OutputStream.Write(buf, 0, bytesRead);
                HttpContext.Current.Response.End();
            }
            finally
            {
                stream.Close();
            }
        } 

http://www.cnblogs.com/cnaspnet/archive/2008/09/23/716881.html服務器

 


 

本身嘗試操做的:網絡

首先保證內網的網站服務器能訪問到 文件服務器。session

一、在文件服務器上建立用戶  例如:用戶名:UploadUser、 密碼:123456app

二、在文件服務器上建立共享文件夾  例如:Data_qz 同時增長用戶UploadUser對於此文件夾的讀寫權限。測試

三、在網站服務器上建立同名,同密碼的用戶。

四、將網站的IIS從新啓動運行。

注:須要在webconfig文件中的  <appSettings>節點下,建立節點UploadPath。 例如:<add key="UploadPath" value="\\文件服務器IP\共享文件夾\"/>,如:「\\192.168.0.7\Data_qz\」。

 

webconfig:

    <add key="UploadPath" value="\\192.xxx.0.x\Data_qz\"/>
    <add key="UploadUser" value="UploadUser"/>
    <add key="UploadPwd" value="Aa123456"/>

 

Global.asax

void
Application_Start(object sender, EventArgs e) { // 在應用程序啓動時運行的代碼 System.Diagnostics.Process.Start("net.exe", "use \\"+ConfigurationManager.AppSettings["UploadPath"].Trim() +" \""+ConfigurationManager.AppSettings["UploadPwd"].Trim()+"\" /user:\""+ConfigurationManager.AppSettings["UploadUser"].Trim()+"\""); }

 

頁面上傳代碼:
//本地上傳
f_upload.SaveAs(Request.MapPath("../Data/Appraise") + @"\" + announceDoc.FileUrl.Trim()); 
//異地上傳
f_upload.SaveAs(ConfigurationManager.AppSettings["UploadPath"].Trim() + @"Data\\Appraise\\" + announceDoc.FileUrl.Trim());

 

//前臺控件
<asp:FileUpload runat="server" ID="f_upload" /> 頁面上傳代碼: //本地上傳 f_upload.SaveAs(Request.MapPath("../Data/Appraise") + @"\" + announceDoc.FileUrl.Trim()); //異地上傳 f_upload.SaveAs(ConfigurationManager.AppSettings["UploadPath"].Trim() + @"Data\\Appraise\\" + announceDoc.FileUrl.Trim());
相關文章
相關標籤/搜索