나는 윈도우 폰 응용 프로그램에서 일하고 있습니다. 이 앱을 사용하면 사용자가 사진을 찍어 내 서버에 업로드 할 수 있습니다. 나는 이것을 성공적으로 구현했다. 그러나 때때로 사진이 제대로 업로드되지 않는 것으로 나타났습니다. 나는 누군가가 앱 업로드를 완료하기 전에 잠자기 상태로있을 때 이런 일이 일어난다 고 생각한다. 또는 연결이 중단됩니다. 나는이 문제를 해결하는 방법을 정말로 모른다. 나는 여기에 나의 코드를 포함시켰다. 누군가가 통찰력을 제공 할 수 있기를 바랍니다.보장 파일 업로드는 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
죄송합니다. 나는 그것을 볼 수 있습니다. 문자열 pictureBytes를 캡처하고 AddPicture()를 호출하는 코드를 게시 할 수 있습니까? – Les