我正在使用Windows Phone應用程序。這個應用程序將讓用戶拍照並將其上傳到我的服務器。我已經成功實施了這個。不過,我注意到有時圖片無法正確上傳。我懷疑這發生在有人在完成上傳之前讓應用程序進入睡眠狀態。或者連接中斷。我真的不知道如何解決這個問題。我在這裏包含了我的代碼。我希望有人能提供一些見解。確保將文件從Windows Phone上傳到ASP.NET MVC 3
Client Side - Windows Phone App - Picture.cs
--------------------------------------------
public event EventHandler Upload_Succeeded;
public event EventHandler Upload_Failed;
public void Upload()
{
try {
WebRequest request = HttpWebRequest.Create(GetBackendPictureUploadUrl());
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(UploadBeginGetRequestStreamCallBack), request);
} catch (Exception ex)
{
Upload_Failed(this, EventArgs.Empty);
}
}
private void UploadBeginGetRequestStreamCallBack(IAsyncResult ar)
{
try {
StringBuilder sb = new StringBuilder();
this.ImageBytes.ToList<byte>().ForEach(x => sb.AppendFormat("{0}.", Convert.ToUInt32(x)));
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("username", GetUsername());
parameters.Add("pictureByts", sb.ToString());
string data = string.Empty;
foreach (string key in parameters.Keys)
{
data += key;
data += "=";
data += parameters[key];
data += "&";
}
data = data.Substring(0, data.Length - 1);
HttpWebRequest webRequest = (HttpWebRequest)(ar.AsyncState);
using (Stream postStream = webRequest.EndGetRequestStream(ar))
{
byte[] byteArray = Encoding.UTF8.GetBytes(data);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
}
webRequest.BeginGetResponse(new AsyncCallback(Upload_Completed), webRequest);
} catch (Exception ex)
{
Upload_Failed(this, EventArgs.Empty);
}
}
private void Upload_Completed(IAsyncResult result)
{
Upload_Succeeded(this, EventArgs.Empty);
}
Server Size - ASP.NET MVC - MyController.cs
-------------------------------------------
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddPicture(string username, string pictureBytes)
{
string path = ConfigurationManager.AppSettings["pictureDirectory"] + "/" + username + "/";
if (Directory.Exists(path) == false)
Directory.CreateDirectory(path);
string filePath = path + "/" + Guid.NewGuid().ToString() + ".png";
// Save the picture to the file system
string[] bytesToConvert = pictureBytes.Split('.');
List<byte> fileBytes = new List<byte>();
bytesToConvert.ToList<string>().Where(x => !string.IsNullOrEmpty(x)).ToList<string>().ForEach(x => fileBytes.Add(Convert.ToByte(x)));
using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
{
byte[] bytes = fileBytes.ToArray();
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Close();
}
}
我很困惑。這段代碼在我看來是正確的。但我注意到文件正在我的服務器上寫入。有時他們只是灰色的圖像。有時看起來圖像的一部分是被寫入的,但不是全部。我究竟做錯了什麼?如何確保文件完全上傳/正確書寫?必須有某種方式來做到這一點。顯然,Facebook等正在這樣做。我究竟做錯了什麼?
你有服務器端的代碼嗎? – Les 2012-07-26 16:22:46
對不起,我看到了。你可以發佈代碼捕獲字符串pictureBytes並調用AddPicture()嗎? – Les 2012-07-26 16:32:01