[英]ASP.NET file transfer from local machine to another machine
我基本上想將文件從客戶端傳輸到文件存儲服務器,而無需實際登錄服務器,以使客戶端無法直接訪問服務器上的存儲位置。 只有通過Windows登錄手動登錄到存儲服務器時,才能執行此操作。 我不想那樣做。 這是一個基於Web的應用程序。
使用下面的鏈接,我為應用程序編寫了代碼。 我仍然無法正確處理,請參考鏈接並為我提供幫助...
以下是我的代碼:
protected void Button1_Click(object sender, EventArgs e)
{
filePath = FileUpload1.FileName;
try
{
WebClient client = new WebClient();
NetworkCredential nc = new NetworkCredential(uName, password);
Uri addy = new Uri("\\\\192.168.1.3\\upload\\");
client.Credentials = nc;
byte[] arrReturn = client.UploadFile(addy, filePath);
Console.WriteLine(arrReturn.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
以下行不執行...
byte[] arrReturn = client.UploadFile(addy, filePath);
這是我得到的錯誤:
WebClient請求期間發生異常
嗯,看來(有充分的理由) FileUpload
只能將文件保存到Web服務器及其驅動器。 所以我的第一個想法行不通。
但是:如果您具有必要的權限,您是否不能使用標准的System.IO調用將在FileUpload中獲得的文件保存到該UNC路徑中? 就像是 :
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string completeFileName =
Path.Combine(@"\\192.168.1.3\upload", FileUpload1.FileName);
BinaryReader br = new BinaryReader(FileUpload1.PostedFile.InputStream);
FileStream fstm = new FileStream(completeFileName, FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fstm);
byte[] buffer = br.ReadBytes(FileUpload1.PostedFile.ContentLength);
br.Close();
bw.Write(buffer);
bw.Flush();
bw.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
如果您希望上傳非常大的文件,則可能需要將數據從BinaryReader
批量傳輸到BinaryWriter
而不是僅分配一個緩沖區-但這實際上只是實現細節。
幾天前,我遇到了同樣的問題,我通過在Web服務器和存儲服務器上創建一個具有相同用戶名和密碼的用戶來解決該問題,然后將該用戶模擬在web.config文件中。
注意:用戶應該在要存儲文件的目錄中具有RW權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.