我使用C#創建文件上傳服務上傳文件(大尺寸)。 我創建了三個方法: 我怎樣才能在IIS(Internt的信息服務)使用的FileStream在WebService的
upload_start(string filename)
upload_continue(string filename, byte[] buffer)
upload_end(string filename)
它的工作原理,但我不希望從客戶端程序處理3種功能。如何從客戶端程序打開FileStream,並讓服務器端完成文件上傳?
我使用C#創建文件上傳服務上傳文件(大尺寸)。 我創建了三個方法: 我怎樣才能在IIS(Internt的信息服務)使用的FileStream在WebService的
upload_start(string filename)
upload_continue(string filename, byte[] buffer)
upload_end(string filename)
它的工作原理,但我不希望從客戶端程序處理3種功能。如何從客戶端程序打開FileStream,並讓服務器端完成文件上傳?
最簡單的方法可能是創建一個REST服務,或者用wcf或者用asp.net做類似的事情,但是你只需要做一個POST
的操作,服務器就可以完成這項工作。
這裏有一個辦法:
http://debugmode.net/2011/05/01/uploading-file-to-server-from-asp-net-client-using-wcf-rest-service/
這將有一個簡單的界面給你。
我不認爲你可以作爲的FileStream無法序列化。爲什麼不傳遞服務的文件名(就像你已經是這樣)並讓服務打開文件並處理它。
但似乎我只能request.getInputStream讀取所有上傳的文件。
我可以從Web服務的服務器端文件名,因爲該文件是在客戶端無法打開文件。 –
alex
2011-05-21 14:31:11
@alex - 服務器將無法訪問文件系統中的客戶機上,因爲這是別人願意利用一個令人難以置信的大量的安全漏洞。 – 2011-05-21 18:41:06
上傳的Web服務(而不是Windows Cominication基金會WCF),這是要走的路一個大文件:添加此XML和改變取決於最大的maxRequestLength的值
在服務器端文件的Web.Config上傳的大小,defoult的maxRequestLength爲4MB,在這個例子中8192 = MB
<httpRuntime
executionTimeout="600"
maxRequestLength="8192"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
添加其他公共職能在服務器端,這個函數接受一個byte []包含的文件,文件名和路徑,你不會將該文件保存在服務器中。
public String UploadFile(byte[] fileByte, String fileName, String savePath)
{
string newPath = savePath;
if (!Directory.Exists(newPath))
{
Directory.CreateDirectory(newPath);
}
newPath = newPath + fileName;
System.IO.FileStream fs1 = null;
byte[] b1 = null;
b1 = fileByte;
fs1 = new FileStream(newPath, FileMode.Create);
fs1.Write(b1, 0, b1.Length);
fs1.Flush();
fs1.Close();
fs1 = null;
return newPath;
}
在客戶端添加此代碼發送的文件:
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Select a File";
dlg.DefaultExt = ".xls";
dlg.Filter = "Excel documents (.xls)|*.xls";
// Show open file dialog box
Nullable<bool> result = dlg.ShowDialog();
// Process open file dialog box results
if (result == true)
{
string filename = dlg.FileName;
string file = Path.GetFileName(filename);
System.IO.FileStream fs1 = null;
fs1 = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read);
byte[] b1 = new byte[fs1.Length];
fs1.Read(b1, 0, (int)fs1.Length);
fs1.Close();
String savePath = @"C:\DOC\IMPORT\";
String newPath = WEB_SERVICES.UploadFile(b1, file, savePath);
MessageBox.Show(String.Format("The file is uploaded in {0}", newPath));
}
else
{
MessageBox.Show("Select a file, please");
}
要啓動具有該文件從客戶端上傳,那麼服務器可以接管從客戶端讀取文件電腦?我試圖澄清你想要做什麼。 – 2011-05-21 03:46:30
是的,我希望服務器保重一切。 – alex 2011-05-21 16:12:22