Sunday, February 2, 2014

How to upload image to server on HTTP POST without namespace of System?

Hello


I am developing Windows Store App now.


I need to upload image file to Azure Server as Multipart-Content.


I converted each data (fx, header , image file) to byte[] data.


And I combined each byte[] data into one.


here is my code,but it don't work.



async private void ProfileImage_doubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();

openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

openPicker.ViewMode = PickerViewMode.Thumbnail;

openPicker.FileTypeFilter.Clear();
openPicker.FileTypeFilter.Add(".bmp");
openPicker.FileTypeFilter.Add(".png");
openPicker.FileTypeFilter.Add(".jpeg");

StorageFile file = await openPicker.PickSingleFileAsync();
fileName = file.Name;

if(file != null)
{

filestream = await file.OpenAsync(FileAccessMode.Read);

bitmapImage = new BitmapImage();
bitmapImage.SetSource(filestream);

if(bitmapImage.PixelHeight >64 && bitmapImage.PixelWidth > 64)
{
return;
}
profileimage.Source = bitmapImage;

Uri targetAdresse = new Uri("http://ift.tt/MQsb2s;);


HttpCookie cookie = new HttpCookie("sid", domainValue, "");
cookie.Value = sidValue;
cookie.Secure = false;
cookie.HttpOnly = false;
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
var replaced = filter.CookieManager.SetCookie(cookie, false);

string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryByte = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
BasicProperties bp = await file.GetBasicPropertiesAsync();
string formDataTemplate = "name = \"{0}\"\r\n\r\n{1}";
string headerTemplate = "name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, "prfimg", fileName, file.ContentType);
string formItem = string.Format(formDataTemplate, "prfimg", file);
byte[] fdata = new byte[bp.Size];
byte[] headerByte = System.Text.Encoding.UTF8.GetBytes(header);
byte[] formItemByte = System.Text.Encoding.UTF8.GetBytes(formItem);
byte[] trailer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

IInputStream istream = filestream.GetInputStreamAt(0);
DataReader reader = new DataReader(istream);
await reader.LoadAsync((uint)fdata.Length);
reader.ReadBytes(fdata);


byte[] data = new byte[headerByte.Length + fdata.Length];
Array.Copy(headerByte, 0, data,0, headerByte.Length);
Array.Copy(fdata, 0, data,headerByte.Length, fdata.Length);

MemoryStream mem = new MemoryStream(data);
IInputStream rstream = mem.AsInputStream();


HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, targetAdresse);
HttpMultipartFormDataContent content = new HttpMultipartFormDataContent(boundary);
HttpStreamContent stream = new HttpStreamContent(rstream);
content.Add(stream);
requestMessage.Content = content;

HttpResponseMessage response;
HttpClient client = new HttpClient();
response = await client.SendRequestAsync(requestMessage);
profileText.Text = await response.Content.ReadAsStringAsync();
}

}

I want some advice.







No comments:

Post a Comment