首页 > 其他分享 >MAUI 实现图片上传

MAUI 实现图片上传

时间:2023-04-09 14:00:16浏览次数:30  
标签:return await bytes MAUI UploadImage fileResult 上传 public 图片

MAUI 实现图片上传功能

 

1、Mainpage.xmal 中进行调用 代码如下

<Image x:Name="Image_Upload"  Source="{Binding User.HeaderImg}" />

 <Button Text="上传" Clicked="UploadImage_Clicked"/>

2,创建一个UploadImage类 实现选择图片并上传的方法

 public class UploadImage
    {
        /// <summary>
        /// 选择图片
        /// </summary>
        /// <returns></returns>
        public async Task<FileResult> OpenMediaPickerAsync()
        {
            try
            {
                var result = await MediaPicker.PickPhotoAsync(new MediaPickerOptions
                {
                    Title = "请选择图片"
                });
                if (result.ContentType == "image/png" ||
                    result.ContentType == "image/jpeg" ||
                    result.ContentType == "image/png")
                    return result;
                else
                    await App.Current.MainPage.DisplayAlert("图片类型错误", "请选择新的图片", "确定");
                return null;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }

        public async Task<Stream> FileResultToStream(FileResult fileResult)
        {
            if (fileResult == null)
                return null;
            return await fileResult.OpenReadAsync();    
        }

        public Stream ByteArrayToStream(byte[] bytes)
        {
            return new MemoryStream(bytes);
        }

        public string ByteBase64ToString(byte[] bytes)
        {
            return Convert.ToBase64String(bytes);
        }

        public byte[] StringToByteBase64(string text)
        {
            return Convert.FromBase64String(text);
        }


        public async Task<ImageFile> Upload(FileResult fileResult)
        {
            byte[] bytes;
            try
            {
                using (var ms=new MemoryStream())
                {
                    var stream = await FileResultToStream(fileResult);
                    stream.CopyTo(ms);
                    bytes=ms.ToArray();
                }
                return new ImageFile
                {
                    ByteBase64 = ByteBase64ToString(bytes),
                    ContentType = fileResult.ContentType,
                    FileName = fileResult.FileName
                };
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }
    }

 

3,在mainpage.xmal.cs中引用UploadImage 类实现 UploadImage_Clicked 方法 

 1 private async void UploadImage_Clicked(object sender, EventArgs e)
 2     {
 3         var img = await uploadimage.OpenMediaPickerAsync();
 4         var imagefile = await uploadimage.Upload(img);
 5 
 6         Image_Upload.Source = ImageSource.FromStream(() =>
 7 
 8             uploadimage.ByteArrayToStream(uploadimage.StringToByteBase64(imagefile.ByteBase64))
 9         );
10         11     }

如果需要进一步升级,比如 实现头像上传使用XAML 是否有办法在.NET MAUI(适用于Android和iOS)中实现裁剪图像的功能?

可以使用IImage.Resize方法来调整图像的大小。

Maui中的图像有一个Clip属性,您可以为它设置不同的形状以达到您想要的裁剪效果。

 

标签:return,await,bytes,MAUI,UploadImage,fileResult,上传,public,图片
From: https://www.cnblogs.com/widows/p/17300254.html

相关文章

  • windows下无法访问静态图片,报错java.net.UnknownHostException
    如果你是这种方式映射静态文件的,那可以继续看下去了@Value("${prop.me.hddir}")privateStringhddir;privatevoidaddstatic(ResourceHandlerRegistryregistry){Stringdir=hddir+"/static/";log.info("启动加资源路径...addResourceHa......
  • [MAUI 项目实战] 手势控制音乐播放器(二): 手势交互
    @目录原理交互实现容器控件手势开始手势运行手势结束使用控件拖拽物创建pit集合项目地址原理定义一个拖拽物,和它拖拽的目标,拖拽物可以理解为一个平底锅(pan),拖拽目标是一个坑(pit),当拖拽物进入坑时,拖拽物就会被吸附在坑里。可以脑补一下下图:你问我为什么是平底锅和坑,当然了在微软......
  • 使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo
    使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo任务需求Imganet数据集,由于原始图片有灰度图片、彩色图片和RGBA图片,我们的要求是将灰度图片和RGBA图片通过Image.open(img_path+img_name).convert('RGB')转换为RGB三通道图片重新保存起来。要求点......
  • Unity-浏览360图片
    1、导入360全景图,去掉GenerateMipMaps的勾选,防止出现接缝线。2、新建Sphere样式的空对象,坐标与Camera相同3、Camera的ClearFlags设置为:SolidColor4、新建材质球 Shader选择 Skybox/Panormic5、把全景附给材质球,再把材质球托给Sphere的空对象6、相机做一个自......
  • Scrapy爬虫框架 -- 图片爬取
    一、新建一个tupian爬虫项目scrapystartprojecttupian二、进入到tupian项目,新建一个image爬虫文件cdtupianscrapygenspiderimagewww.xxx.com三、修改配置文件settingsROBOTSTXT_OBEY=FalseLOG_LEVEL='ERROR'USER_AGENT="Mozilla/5.0(WindowsNT10.0;Win64;x64)......
  • mac上传文件到obs需要配置的环境
    本篇主要是使用mac对华为云对象存储服务OBS上传的一些说明。配置环境华为云obsutil下载地址下载后得到.tar.gz格式的文件解压tar-xzvfxx.tar.gz进入obsutil所在目录,执行以下命令,为obsutil增加可执行权限。cdxxchmod755obsutil配置obsutil./obsutilconfig-i=a......
  • PHP实现随机图片API
    分享两种PHP随机图片源码,第一种访问本地图片,第二种访问图片链接,代码如下:<!--资源宝分享:www.httple.net--><?phpheader('Cache-Control:no-cache,must-revalidate');header('Pragma:no-cache');header("Expires:0");header("Access-Control-Allow-Origin:*&......
  • 上传了ipa但在苹果App Store中没有看到构建版本的问题
     AU上传ipa出现下图红框提示说明成功上传,但有时AppStore后台没有出现构建版本,请查看下面详细说明!编辑 一、首先登录iTunesConnect后台、查看ipa构建情况https://appstoreconnect.apple.com/点击进入APP,点击活动,所有构建版本选项(下图所示),有两种情况!1、ipa包符合要求,显示正在处......
  • 上传了ipa但在苹果App Store中没有看到构建版本的问题
    ​ AU上传ipa出现下图红框提示说明成功上传,但有时AppStore后台没有出现构建版本,请查看下面详细说明!​编辑  一、首先登录iTunesConnect后台、查看ipa构建情况https://appstoreconnect.apple.com/点击进入APP,点击活动,所有构建版本选项(下图所示),有两种情况!1、ipa包符......
  • C# asp.net开源插件推荐:PdfiumViewer ( pdf 转成 图片png pdf convert to image )
    1.nuget安装插件2.上代码//DefinemethodtoconvertPDFtoPNGpublicvoidConvertPdfToPng(stringpdfFilePath,stringpngFileFolder,ImageFormatformat){//Setresolution(DPI)intdpi=300;//Ren......