Uploading ImageFile on Remote Server with Windows Phone7
Helper class file
using System;
}
Happy Coding...
Helper class file
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Threading;
using System.Collections.Generic;
namespace FileUploadExample
{
public class SendFile
{
public string url { get; set; }
public string fileName = null;
public Dictionary<string, object> parameters { get; set; }
string boundary = "----------" + DateTime.Now.Ticks.ToString();
public SendFile() { }
public void Submit()
{
// Prepare web request...
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));
myRequest.Method = "POST";
myRequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
myRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myRequest);
}
private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = request.EndGetRequestStream(asynchronousResult);
writeMultipartObject(postStream, parameters);
postStream.Close();
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
try
{
var request = (HttpWebRequest)asynchronousResult.AsyncState;
var response = request.EndGetResponse(asynchronousResult);
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
// FAIL - httpWebRequestTextBlock.Text = reader.ReadToEnd(); //UnauthorizedAccessException was Unhandled - Invalid cross-thread access.
// FAIL - Dispatcher.BeginInvoke(() => { httpWebRequestTextBlock.Text = reader.ReadToEnd(); }); //ObjectDisposedException unhandled - Cannot read from a closed TextReader.
var contents = reader.ReadToEnd();
Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(contents); });
}
}
catch (System.Net.WebException)
{
Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show("Time out Occur. Please try again"); });
}
}
public void writeMultipartObject(Stream stream, object data)
{
StreamWriter writer = new StreamWriter(stream);
if (data != null)
{
foreach (var entry in data as Dictionary<string, object>)
{
WriteEntry(writer, entry.Key, entry.Value);
}
}
writer.Write("--");
writer.Write(boundary);
writer.WriteLine("--");
writer.Flush();
}
private void WriteEntry(StreamWriter writer, string key, object value)
{
if (value != null)
{
writer.Write("--");
writer.WriteLine(boundary);
if (value is byte[])
{
byte[] ba = value as byte[];
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; filename=""{1}""", key, fileName);
writer.WriteLine(@"Content-Type: application/octet-stream");
//writer.WriteLine(@"Content-Type: image / jpeg");
writer.WriteLine(@"Content-Length: " + ba.Length);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
output.Write(ba, 0, ba.Length);
output.Flush();
writer.WriteLine();
}
else
{
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""", key);
writer.WriteLine();
writer.WriteLine(value.ToString());
}
}
}
}
}
Code behind Logic
private void cmdGetImage_Click(object sender, RoutedEventArgs e)
{
photo.ShowCamera = true;
photo.Show();
photo.Completed += new EventHandler<PhotoResult>(photo_Completed);
}
void photo_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
byte[] byteArray = Setting.ReadToEnd(e.ChosenPhoto);
string filename = "file:" + e.OriginalFileName;
SendMessage(txtUsername.Text , txtMessage.Text, DateTime.Now.ToString(), "Text", byteArray , filename);
}
else
MessageBox.Show("not found");
}
// Method to convert Stream in to byte[] Array
public static byte[] ReadToEnd(System.IO.Stream stream)
{
long originalPosition = 0;
if (stream.CanSeek)
{
originalPosition = stream.Position;
stream.Position = 0;
}
try
{
byte[] readBuffer = new byte[4096];
int totalBytesRead = 0;
int bytesRead;
while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
{
totalBytesRead += bytesRead;
if (totalBytesRead == readBuffer.Length)
{
int nextByte = stream.ReadByte();
if (nextByte != -1)
{
byte[] temp = new byte[readBuffer.Length * 2];
Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
readBuffer = temp;
totalBytesRead++;
}
}
}
private void SendMessage(string
_username , string _message, string _date, string _mode, byte[] fileArray , string filename)
{
Dictionary<string, object> data = new Dictionary<string, object>()
{
{"username", _username},
{"message", _message},
{"date", _date},
{"mode",_mode},
{"file", fileArray}
};
string serverFileName = "image_" + DateTime.Now.ToFileTime() + filename.Substring(filename.LastIndexOf('.'), filename.Length - filename.LastIndexOf('.'));
// Call the constructor of above Helper file
SendFile post = new SendFile
{
url = "Enter your webservice Url",
parameters = data,
fileName = serverFileName
};
// Calling the post method of Helper file
post.Submit();
Happy Coding...
No comments:
Post a Comment