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