2014-10-06 27 views
0

我在窗口手机8.0上工作,我在尝试从移动电话向网站提交发布请求时遇到了问题。输入名为“文件”,它只接受图像文件。窗口电话8提交图像形式

<form action="upmeme" method="post" enctype="multipart/form-data"> 
    <input type="file" class="file" name="file" id="file"><br> 
    <input type="submit" class="submit" name="submit" value="Submit"> 
</form> 

,或者你可以在这里老朋友:this website

我用PhotoPicker可供选择libary照片,并将其保持到“照片” Stream photo = e.ChosenPhoto;它完美地工作。

现在我需要上传照片,并提交以上。这形式是我的代码调用来发送POST请求,但它不工作,响应相同登顶

photo.Position = 0; 
HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(url);   
HttpRequestMessage request = new HttpRequestMessage(); 
MultipartFormDataContent form = new MultipartFormDataContent(); 
form.Add(new StreamContent(photo),"file"); 
HttpResponseMessage response = await client.PostAsync(url, form); 
string responseBodyAsText = await response.Content.ReadAsStringAsync(); 

我之前试图在互联网周围寻找,我发现与我的相同的结果。我的代码在某处错了吗?

+0

我已经实现了一些简单的HTTP类上传文件,看看http://mytoolkit.codeplex.com/wikipage?title=Http,章节“HTTP POST” – 2014-12-15 15:33:05

回答

0

检索位图图像:

public async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args) 
{ 
    if (args.Files.Count > 0) 
    { 
     var imageFile = args.Files[0] as StorageFile; 
     // Ensure the stream is disposed once the image is loaded 
     using (IRandomAccessStream fileStream = await imageFile.OpenAsync(Windows.Storage.FileAccessMode.Read)) 
     { 
      // Set the image source to the selected bitmap 
      BitmapImage bitmapImage = new BitmapImage(); 

      await bitmapImage.SetSourceAsync(fileStream); 
      ImageControl.Source = bitmapImage; 

      await _viewModel.Upload(imageFile); 
     }    
    } 
} 

创建文件流:

internal async Task Upload(Windows.Storage.StorageFile file) 
{ 
    var fileStream = await file.OpenAsync(FileAccessMode.Read); 
    fileStream.Seek(0); 

    var reader = new Windows.Storage.Streams.DataReader(fileStream.GetInputStreamAt(0)); 
    await reader.LoadAsync((uint)fileStream.Size); 

    Globals.MemberId = ApplicationData.Current.LocalSettings.Values[Globals.PROFILE_KEY]; 
    var userName = "Rico"; 
    var sex = 1; 
    var url = string.Format("{0}{1}?memberid={2}&name={3}&sex={4}", Globals.URL_PREFIX, "api/Images", Globals.MemberId, userName,sex); 
    byte[] image = new byte[fileStream.Size]; 

    await UploadImage(image, url); 
} 

创建从所述图像的存储器流:

public async Task UploadImage(byte[] image, string url) 
{ 
    Stream stream = new System.IO.MemoryStream(image); 
    HttpStreamContent streamContent = new HttpStreamContent(stream.AsInputStream()); 

    Uri resourceAddress = null; 
    Uri.TryCreate(url.Trim(), UriKind.Absolute, out resourceAddress); 
    Windows.Web.Http.HttpRequestMessage request = new Windows.Web.Http.HttpRequestMessage(Windows.Web.Http.HttpMethod.Post, resourceAddress); 
    request.Content = streamContent; 

    var httpClient = new Windows.Web.Http.HttpClient(); 
    var cts = new CancellationTokenSource(); 
    Windows.Web.Http.HttpResponseMessage response = await httpClient.SendRequestAsync(request).AsTask(cts.Token); 
} 
+0

这个版本用于窗口手机8.1,不是吗? ?我在8.0上工作,我认为它不支持你的脚本,任何方式谢谢你的anwser。 – 2014-10-07 20:29:34