1
我需要使用Silverlight和C#更新遠程服務器上的文件。 我在當前機器上創建了該文件,之後我嘗試使用this example上傳它。它沒有返回錯誤,但它也沒有上傳我的文件。在Silverlight中上傳文件
你能幫我嗎?
這是ASHX代碼
<%@ WebHandler Language="C#" Class="receiver" %>
using System;
using System.Web;
using System.IO;
public class receiver : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string filename = context.Request.QueryString["DB.xml"].ToString();
using (FileStream fs = File.Create(context.Server.MapPath("~/CLientBin" + filename)))
{
SaveFile(context.Request.InputStream, fs);
}
}
private void SaveFile(Stream stream, FileStream fs)
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
fs.Write(buffer, 0, bytesRead);
}
}
public bool IsReusable {
get {
return false;
}
}
}
,這是C#代碼:
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = false;
dlg.Filter = "All files (*.*)|*.*|PNG Images (*.png)|*.png";
bool? retval = dlg.ShowDialog();
if (retval != null && retval == true)
{
try
{
UploadFile(dlg.File.Name, dlg.File.OpenRead());
titlu.Text = dlg.File.Name;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
titlu.Text = "No file selected...";
}
}
private void UploadFile(string fileName, Stream data)
{
UriBuilder ub = new UriBuilder("http://ganduri.elementfx.com/Handler.ashx");
ub.Query = string.Format("filename={0}", fileName);
WebClient c = new WebClient();
c.OpenWriteCompleted += (sender, e) =>
{
PushData(data, e.Result);
e.Result.Close();
data.Close();
};
c.OpenWriteAsync(ub.Uri);
}
private void PushData(Stream input, Stream output)
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
{
output.Write(buffer, 0, bytesRead);
}
MessageBox.Show("Writed");
}
我還檢查了權限的ClientBin文件夾中,讀/寫權限 當我運行這段代碼向我展示了「Writed」messageBox,但是如果我查看服務器,文件不在任何地方。 我已經在af ashx文件函數中設置了一個斷點,並且id沒有到達它們中的任何一個。
我不認爲我們可以幫你沒有源代碼... – Nuffin 2012-01-12 18:20:24
剛剛嘗試調試。 – 2012-01-12 18:24:07
額外提示:請注意,該示例接受任何文件名,當有人開始傳遞'「../../ somename」時,可能會給您帶來很多麻煩'' – 2012-01-12 19:23:52