UWP 使用Windows.Web.Http命名空間下的HttpClient使用post方法,上傳圖片伺服器

来源:http://www.cnblogs.com/qq-smile/archive/2017/08/02/7273467.html
-Advertisement-
Play Games

1.從相冊裡面選取圖片 2.從相機裡面選取圖片 3.裁剪圖片調用的公共方法CutPicture 4.使用Windows.Web.Http命名空間下的HttpClient使用post方法,上傳圖片伺服器 參考:https://social.msdn.microsoft.com/Forums/zh-CN ...


1.從相冊裡面選取圖片

 1         /// <summary>
 2         /// 1.1 從相冊裡面選取圖片
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private async void btnPhoto_Click(object sender, RoutedEventArgs e)
 7         {
 8             //創建和自定義 FileOpenPicker (從本地獲取一張圖片) 
 9             FileOpenPicker picker = new FileOpenPicker();
10             picker.ViewMode = PickerViewMode.Thumbnail; //可通過使用圖片縮略圖創建豐富的視覺顯示,以顯示文件選取器中的文件  
11             picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;//對話框打開時的預設路徑(圖片庫)
12             //設置可選擇的文件類型
13             picker.FileTypeFilter.Add(".jpg");
14             picker.FileTypeFilter.Add(".jpeg");
15             picker.FileTypeFilter.Add(".png");
16             picker.FileTypeFilter.Add(".gif");
17             //選取單個文件  
18             StorageFile file = await picker.PickSingleFileAsync();
19             if (file != null)
20             {
21                 CutPicture(file);//裁剪圖片
22             }
23         }

2.從相機裡面選取圖片

 1         /// <summary>
 2         /// 1.2 相機
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private async void btnCamera_Click(object sender, RoutedEventArgs e)
 7         {
 8             CameraCaptureUI captureUI = new CameraCaptureUI();
 9             captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;//註意:這裡只設置了返回圖片格式:Jpeg如果是:Png(手機可以顯示,在核心後臺圖片不顯示)和JpegXR(都不顯示)會報錯;;根據實際情況來
10             captureUI.PhotoSettings.AllowCropping = false;
11             StorageFile photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);
12             if (photo != null)
13             {
14                 CutPicture(photo);//裁剪圖片
15             }
16         }

3.裁剪圖片調用的公共方法CutPicture

 1         /// <summary>
 2         /// 1.4 裁剪圖片
 3         /// </summary>
 4         /// <param name="file"></param>
 5         public async void CutPicture(StorageFile file)
 6         {
 7             #region 裁剪圖片
 8             var inputFile = SharedStorageAccessManager.AddFile(file);//  獲取一個文件共用Token,使應用程式能夠與另一個應用程式共用指定的文件。
 9             var destination = await ApplicationData.Current.LocalFolder.CreateFileAsync("Cropped.jpg", CreationCollisionOption.ReplaceExisting);//在應用文件夾中建立文件用來存儲裁剪後的圖像 
10             var destinationFile = SharedStorageAccessManager.AddFile(destination);
11             var options = new LauncherOptions();
12             options.TargetApplicationPackageFamilyName = "Microsoft.Windows.Photos_8wekyb3d8bbwe";//應用於啟動文件或URI的目標包的包名稱
13             //待會要傳入的參數 
14             var parameters = new ValueSet();
15             parameters.Add("InputToken", inputFile);                //輸入文件 
16             parameters.Add("DestinationToken", destinationFile);    //輸出文件 
17             parameters.Add("ShowCamera", false);                    //它允許我們顯示一個按鈕,以允許用戶採取當場圖象(但是好像並沒有什麼用) 
18             parameters.Add("EllipticalCrop", true);                 //截圖區域顯示為圓(最後截出來還是方形) 
19             parameters.Add("CropWidthPixals", 300);
20             parameters.Add("CropHeightPixals", 300);
21             //調用系統自帶截圖並返回結果 
22             var result = await Launcher.LaunchUriForResultsAsync(new Uri("microsoft.windows.photos.crop:"), options, parameters);
23             if (result.Status == LaunchUriStatus.Success && result.Result != null)
24             {
25                 //對裁剪後圖像的下一步處理 
26                 try
27                 {
28                     // 載入已保存的裁剪後圖片 
29                     var stream = await destination.OpenReadAsync();
30                     var bitmap = new BitmapImage();
31                     await bitmap.SetSourceAsync(stream);
32                       // 顯示裁剪過後的圖片 
33                     imglogo.ImageSource = bitmap;
34                     //此方法是請求後臺修改圖片
35                     SetHeadPicture(destination);
36                     OutBorder.Visibility = Visibility.Collapsed;
37                 }
38                 catch (Exception ex)
39                 {
40                     System.Diagnostics.Debug.WriteLine(ex.Message + ex.StackTrace);
41                 }
42             }
43             #endregion
44         }

 4.使用Windows.Web.Http命名空間下的HttpClient使用post方法,上傳圖片伺服器

參考:https://social.msdn.microsoft.com/Forums/zh-CN/ec0ffd44-f7a6-4a53-8f8e-d15e13cfa5fb/windowswebhttphttpclientpost?forum=winstoreappzhcn

我的做法是將需要上傳的參數放在HttpMultipartFormDataContent中,然後再使用HttpClient的PostAsync進行提交

請求參數:

 1       
 2        /// <summary>
 3         /// 向伺服器發送post請求(修改頭像)
 4         /// </summary>
 5         /// <param name="url">路徑</param>
 6         /// <returns></returns>
 7         public async static Task<string> SendPostRequest(string url)
 8         {
 9             try
10             {
11                 Dictionary<string, object> dic = new Dictionary<string, object>();
12                 dic.Add("GWnumber", setHeadPicture.GWnumber);
13                 dic.Add("token", setHeadPicture.Token);
14                 dic.Add("file", setHeadPicture.File);//file值是StorageFile類型
15                 dic.Add("systemType", setHeadPicture.SystemType);
16 
17                 HttpMultipartFormDataContent form = new HttpMultipartFormDataContent();
18                 foreach (KeyValuePair<string, object> item in dic)
19                 {
20                     if (item.Key == "file")
21                     {
22                         StorageFile file = item.Value as StorageFile;
23                         HttpStreamContent streamContent = new HttpStreamContent(await file.OpenReadAsync());
24                         form.Add(streamContent, item.Key, "file.jpg");//註意:這裡的值是必須的,圖片所以使用的是HttpStreamContent
25                     }
26                     else
27                     {
28                         form.Add(new HttpStringContent(item.Value + ""), item.Key);
29                     }
30                 }
31                 HttpClient httpClient = new HttpClient();
32                 HttpResponseMessage response = await httpClient.PostAsync(new Uri(url), form).AsTask();
33                 var contentType = response.Content.Headers.ContentType;
34                 if (string.IsNullOrEmpty(contentType.CharSet))
35                 {
36                     contentType.CharSet = "utf-8";
37                 }
38                 return await response.Content.ReadAsStringAsync();
39 
40             }
41             catch (Exception ex)
42             {
43                 throw ;
44             }
45         }

uwp小白,請多指教!!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 程式猿是否應該接私活? 我大約從去年 11 月份開始接私活做,到目前為止也有大半年了。自己在這大半年的時間里,也學習了很多,在此記錄一下這大半年來的感受以及一些不成熟的建議。 在我看來,在你又打算接私活的時候,你應該考慮以下幾個問題 時間是否充裕? 個人認為這個問題非常重要,如果時間不夠充裕的話,接 ...
  • Coundn't load memtrack module (No such file or directory) 去仔細看日誌,是包名有問題 一、出現癥狀 提示找logcat logcat裡面發現Coundn't load memtrack module (No such file or dire ...
  • JSX並不是一門新的開發語言,而是Facebook提出的語法方案:一種可以在JavaScript代碼中直接書寫HTML標簽的語法糖,所以,JSX本質上還是JavaScript語言。 ...
  • 線性佈局LinearLayout 一、簡介 LinearLayout是一種線型的佈局方式。LinearLayout佈局容器內的組件一個挨著一個地排列起來:不僅可以控制個組件橫向排列,也可控制各組件縱向排列。通過orientation屬性設置線性排列的方向是垂直(vertical)還是縱向(horiz ...
  • android視圖概述 一、簡介 數據和控制項分開的作用: 便於引用 便於修改:修改的時候直接改一次數據就可以了 ...
  • 要求:載入全部的訂單,每個訂單裡面有一個或者多個產品,在列表中要展現出來, 1. xaml界面 步驟:1.這裡使用的是x:bind綁定所以要引入實體類命名空間(OrderList集合中類的命名空間): xmlns:order="using:GemallApp.Core.Models" 2. <Lis ...
  • 要求:評論寶貝的時候一個訂單裡面包含多個產品,獲取對產品的評論內容哦 1. xaml界面 要求:獲取ListView中x:Name為tbContent的值(評論內容) 第一步:綁定TextBox的值使用Mode=TwoWay <TextBox x:Name="tbContent" Text="{Bi ...
  • 1.要求: 發送驗證碼按鈕,點擊後,會倒計時60s,之後才能再次點擊。不同界面的多個驗證碼按鈕共用這個倒計時時間。 2.操作步驟 1) 從登錄界面-->忘記密碼輸入手機號-->下一步-->倒計時60s 2) 返回到註冊頁面-->輸入手機號碼-->下一步-->獲取計時器倒計時到48s,然後從48s繼續 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...