1.从相册里面选取图片

         /// <summary>
/// 1.1 从相册里面选取图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnPhoto_Click(object sender, RoutedEventArgs e)
{
//创建和自定义 FileOpenPicker (从本地获取一张图片)
FileOpenPicker picker = new FileOpenPicker();
picker.ViewMode = PickerViewMode.Thumbnail; //可通过使用图片缩略图创建丰富的视觉显示,以显示文件选取器中的文件
picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;//对话框打开时的默认路径(图片库)
//设置可选择的文件类型
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".gif");
//选取单个文件
StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
CutPicture(file);//裁剪图片
}
}

2.从相机里面选取图片

         /// <summary>
/// 1.2 相机
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnCamera_Click(object sender, RoutedEventArgs e)
{
CameraCaptureUI captureUI = new CameraCaptureUI();
captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;//注意:这里只设置了返回图片格式:Jpeg如果是:Png(手机可以显示,在核心后台图片不显示)和JpegXR(都不显示)会报错;;根据实际情况来
captureUI.PhotoSettings.AllowCropping = false;
StorageFile photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);
if (photo != null)
{
CutPicture(photo);//裁剪图片
}
}

3.裁剪图片调用的公共方法CutPicture

         /// <summary>
/// 1.4 裁剪图片
/// </summary>
/// <param name="file"></param>
public async void CutPicture(StorageFile file)
{
#region 裁剪图片
var inputFile = SharedStorageAccessManager.AddFile(file);// 获取一个文件共享Token,使应用程序能够与另一个应用程序共享指定的文件。
var destination = await ApplicationData.Current.LocalFolder.CreateFileAsync("Cropped.jpg", CreationCollisionOption.ReplaceExisting);//在应用文件夹中建立文件用来存储裁剪后的图像
var destinationFile = SharedStorageAccessManager.AddFile(destination);
var options = new LauncherOptions();
options.TargetApplicationPackageFamilyName = "Microsoft.Windows.Photos_8wekyb3d8bbwe";//应用于启动文件或URI的目标包的包名称
//待会要传入的参数
var parameters = new ValueSet();
parameters.Add("InputToken", inputFile); //输入文件
parameters.Add("DestinationToken", destinationFile); //输出文件
parameters.Add("ShowCamera", false); //它允许我们显示一个按钮,以允许用户采取当场图象(但是好像并没有什么用)
parameters.Add("EllipticalCrop", true); //截图区域显示为圆(最后截出来还是方形)
parameters.Add("CropWidthPixals", );
parameters.Add("CropHeightPixals", );
//调用系统自带截图并返回结果
var result = await Launcher.LaunchUriForResultsAsync(new Uri("microsoft.windows.photos.crop:"), options, parameters);
if (result.Status == LaunchUriStatus.Success && result.Result != null)
{
//对裁剪后图像的下一步处理
try
{
// 载入已保存的裁剪后图片
var stream = await destination.OpenReadAsync();
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
// 显示裁剪过后的图片
imglogo.ImageSource = bitmap;
//此方法是请求后台修改图片
SetHeadPicture(destination);
OutBorder.Visibility = Visibility.Collapsed;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + ex.StackTrace);
}
}
#endregion
}

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进行提交

请求参数:

        /// <summary>
/// 向服务器发送post请求(修改头像)
/// </summary>
/// <param name="url">路径</param>
/// <returns></returns>
public async static Task<string> SendPostRequest(string url)
{
try
{
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("GWnumber", setHeadPicture.GWnumber);
dic.Add("token", setHeadPicture.Token);
dic.Add("file", setHeadPicture.File);//file值是StorageFile类型
dic.Add("systemType", setHeadPicture.SystemType); HttpMultipartFormDataContent form = new HttpMultipartFormDataContent();
foreach (KeyValuePair<string, object> item in dic)
{
if (item.Key == "file")
{
StorageFile file = item.Value as StorageFile;
HttpStreamContent streamContent = new HttpStreamContent(await file.OpenReadAsync());
form.Add(streamContent, item.Key, "file.jpg");//注意:这里的值是必须的,图片所以使用的是HttpStreamContent
}
else
{
form.Add(new HttpStringContent(item.Value + ""), item.Key);
}
}
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.PostAsync(new Uri(url), form).AsTask();
var contentType = response.Content.Headers.ContentType;
if (string.IsNullOrEmpty(contentType.CharSet))
{
contentType.CharSet = "utf-8";
}
return await response.Content.ReadAsStringAsync(); }
catch (Exception ex)
{
throw ;
}
}

uwp小白,请多指教!!

UWP 使用Windows.Web.Http命名空间下的HttpClient使用post方法,上传图片服务器的更多相关文章

  1. 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口

    [源码下载] 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口 作者 ...

  2. 详解 UWP (通用 Windows 平台) 中的两种 HttpClient API

    UWP (通用 Windows 平台) 应用开发者在构建通过 HTTP 与 Web 服务或服务器断点交互的应用时,有多种 API 可以选择.要在一个托管 UWP 应用中实现 HTTP 客户端角色,最常 ...

  3. IntelliJ idea 创建Web项目后web文件夹下没有WEB-INF的解决方法

    1.Ctrl+Shift+Alt+S快捷键进入Project structure(项目结构)管理的界面 2.选择左边菜单栏里的Facet,点击后能看到有Deployment Descriptors的输 ...

  4. [笔记]记录原开发工作在base命名空间下扩展的属性与方法

    前言 该笔记只是为了记录以前开发使用的方式. 处理命名空间namespace /** * 处理命名空间 * @param {string} 空间名称,可多个 * @return {object} 对象 ...

  5. 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法

    也就是在CreateFile的时候打开文件名指定: "\\.\Device"就可以了. 因为代码比较短, 所以我不做注释, 相信大家看代码就能明白意思了. 另外这里读写的都是软盘A ...

  6. Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32)

    本文将介绍 Windows 系统中高 DPI 开发的基础知识.由于涉及到坐标转换,这种转换经常发生在计算的不知不觉中:所以无论你使用哪种 Windows 下的 UI 框架进行开发,你都需要了解这些内容 ...

  7. Windows和Linux环境下Memcached安装与配置(转)

    一.memcached安装配置 windows平台安装 1.memcached-1.2.6-win32-bin.zip下载地址: http://code.jellycan.com/memcached/ ...

  8. 深入System.Web.Caching命名空间 教你Hold住缓存管理

    一,System .Web.Caching与缓存工作机制简介 System.Web.Caching是用来管理缓存的命名空间,其父级空间是System.Web,由此可见,缓存通常用于Web网站的开发,包 ...

  9. 如何在Windows Server 2008 R2下搭建FTP服务

    在Windows Server 2008 R2下搭建FTP服务,供客户端读取和上传文件 百度经验:jingyan.baidu.com 工具/原料 Windows Server 2008 R2 百度经验 ...

随机推荐

  1. ssh 自动登录脚本

    ssh 一般要输入密码,自动设置的方法有两个: 1.通过expect来建立 #!/usr/bin/expect -f # expect在哪个目录下用whereis找下,不同的系统expect安装路径不 ...

  2. 小强的HTML5移动开发之路(29)—— JavaScript回顾4

    一.变量的作用域 javascript脚本的执行过程分为两个阶段: 第一阶段,js引擎()先扫描整个javascript代码.当碰到<script>时,会先创建一个全局的活动对象,将< ...

  3. spark rdd持久化的简单对比

    未使用rdd持久化 使用后 通过对比可以发现,未使用RDD持久化时,第一次计算比使用RDD持久化要快,但之后的计算显然要慢的多,差不多10倍的样子 代码 public class PersistRDD ...

  4. 《iOS8 Swift编程指南》类书图像

    终于拿到了样书.虽然已经猜到这将是一本很厚的书(63万字),但要真正看到实体书或者当我吃了一惊: 从以下这张照片看则更直观了.居然比艾伦.J.马库斯的<投资学>(634页)还要厚: 这本书 ...

  5. 类的XML序列化(XML Serialization)

    最近做的一个ASP.NET项目中,需要在一个页面中维护一个类的数组,在每次页面刷新的使其前一次的状态保持不变.开始错误的使用了static,导致了致命的共享错误.后来突然想起C#类能够使用XML序列化 ...

  6. jQuery.noop

    一个空函数 当你仅仅想要传递一个空函数的时候,就用他吧.这对一些插件作者很有用,当插件提供了一个可选的回调函数接口,那么如果调用的时候没有传递这个回调函数,就用jQuery.noop来代替执行.

  7. 使用带ParserContext参数的Xaml.Load方法

    原文:使用带ParserContext参数的Xaml.Load方法 如果一段XAML中存在一个标记需要从外部命名空间中解析, 就需要用到ParserContext类,  具体用法如下: Normal ...

  8. BSD介绍

    BSD许可证模板  * Copyright (c) 1998, Regents of the University of California  * All rights reserved.    * ...

  9. DWZ使用注意事项

    DWZ使用注意事项 一.前言     在最近的一个项目,介绍DWZ丰富client框架,可以尝试一下.另外,在遇到的很多问题.十一终于攻克. 特别说明本文的.     本人用的是dwz-ria-1.4 ...

  10. JAVA面试题解惑系列(七)——使用日期和时间

    日期和时间,不仅在考试面试题.处理的问题.似乎没有哪个项目能够避开它们.我们经常在处理用户的出生年月日.注冊日期,订单的创建时间等属性时用到,由此可见其重要性.  java.util.Date类  提 ...