原文 win10 uwp 使用 asp dotnet core 做图床服务器客户端

本文告诉大家如何在 UWP 做客户端和 asp dotnet core 做服务器端来做一个图床工具

 

服务器端

win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序 可以了解一个简单的 asp dotnet core 程序是如何搭建,下面来告诉搭建如何做一个简单的图床服务器

注意本文提供的方式不能用在正式的项目,只能在自己玩的项目使用。

创建数据库

为了简单,本文就使用内存做数据库

打开 Startup 的 ConfigureServices 方法,替换为下面代码

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddDbContext<KehallzorDralnaContext>(options =>
options.UseInMemoryDatabase("DihoostaDanarSouser"));

这样就可以使用内存数据库

创建模型

首先创建一个 asp dotnet core 项目,然后添加一个模型

    public class XaseYinairtraiSeawhallkou
{
public int Id { get; set; }
public string Name { get; set; }
public string File { get; set; }
}

这个模型就是用来创建图片使用的,上传图片就调用这个类,包括了文件的文件名和文件

创建控制器

通过右击添加控制器的方法添加一个控制器,控制器需要选使用 EF 的 API 控制器

接下来就是选择刚才模型创建控制器

添加上传下载代码

打开创建的控制器,添加上传和下载的代码,上传的代码很简单,需要用到 post 的方式

        [HttpPost("UploadFile")]
public string UploadFile([FromForm]CukaiZexiridror rarmelHopidrearLis)
 
  • 1
  • 2

这里有一个细节是参数 rarmelHopidrearLis 是从 Form 拿到,这样就需要在 UWP 程序使用 MultipartFormDataContent 的方法上传,这里的 CukaiZexiridror 类包含了两个属性,一个是 Name 一个是上传的文件

    public class CukaiZexiridror
{
public IFormFile File { set; get; }
public string Name { get; set; }
}

这里的 MultipartFormDataContent 的内容需要包含一个 string 内容和一个 Stream 内容,还需要设置对应的 Name 请看本文下方的方法

在调用方法拿到 rarmelHopidrearLis 可以访问本地的一个文件夹,然后将文件写入这个文件夹

            var nefaycisirJisrea = Directory.GetCurrentDirectory();
var demmiraWurrupooHasur = Path.Combine(nefaycisirJisrea, "Image");
 

上面代码使用 GetCurrentDirectory 拿到一个文件夹,这个项目不发了用在实际使用的一个原因就是这里拿到的文件夹建议是管理起来,而不是直接拿到一个文件夹。

这里先判断是否存在文件夹,如果文件夹不存在,就创建文件夹

            if (!Directory.Exists(demmiraWurrupooHasur))
{
Directory.CreateDirectory(demmiraWurrupooHasur);
}

判断是否存在文件,如果存在文件就将这个文件删除,当然这样做只是在玩的时候可以这样写

            var gowkusayJomalltrur = Path.Combine(demmiraWurrupooHasur, rarmelHopidrearLis.Name);

            if (System.IO.File.Exists(gowkusayJomalltrur))
{
System.IO.File.Delete(gowkusayJomalltrur);
}
 

从上传的文件写入到服务器可以使用下面代码,这里的 IFormFile 提供了 CopyTo 可以复制到一个 Stream 调用这个方法就可以让用户创建文件,但是这个方法也有一个问题就是不支持断点续传,同时也不支持大的文件

            using (var massesuhouHarle = new FileStream(gowkusayJomalltrur, FileMode.Create))
{
rarmelHopidrearLis.File.CopyTo(massesuhouHarle);
}
 

很简单的代码就可以保存用户上传的文件,下面就是需要保存文件的路径

将文件的路径写入到数据库

            _context.XaseYinairtraiSeawhallkou.Add(new XaseYinairtraiSeawhallkou()
{
File = gowkusayJomalltrur,
Name = rarmelHopidrearLis.Name
}); _context.SaveChanges();
 

现在的上传的代码

        [HttpPost("UploadFile")]
public string UploadFile([FromForm]CukaiZexiridror rarmelHopidrearLis)
{
var nefaycisirJisrea = Directory.GetCurrentDirectory();
var demmiraWurrupooHasur = Path.Combine(nefaycisirJisrea, "Image"); if (!Directory.Exists(demmiraWurrupooHasur))
{
Directory.CreateDirectory(demmiraWurrupooHasur);
} var gowkusayJomalltrur = Path.Combine(demmiraWurrupooHasur, rarmelHopidrearLis.Name); if (System.IO.File.Exists(gowkusayJomalltrur))
{
System.IO.File.Delete(gowkusayJomalltrur);
} using (var massesuhouHarle = new FileStream(gowkusayJomalltrur, FileMode.Create))
{
rarmelHopidrearLis.File.CopyTo(massesuhouHarle);
} _context.XaseYinairtraiSeawhallkou.Add(new XaseYinairtraiSeawhallkou()
{
File = gowkusayJomalltrur,
Name = rarmelHopidrearLis.Name
}); _context.SaveChanges(); return "上传完成";
}

上传的代码很简单,同时下载的代码就更加简单,核心就是通过 File 方法返回

在服务器的下载代码是通过 get 的方法

        [HttpGet("DownLoadFile")]
public IActionResult DownLoadFile(string fileName)

只要有文件名,所有人都可以下载,本文不告诉大家如何做用户权限

下载的时候使用文件名从数据库找,如果找到了,就判断是否存在这个文件,如果存在就返回


[HttpGet("DownLoadFile")]
public IActionResult DownLoadFile(string fileName)
{
var demmiraWurrupooHasur =
_context.XaseYinairtraiSeawhallkou.FirstOrDefault(xileQawkirXeafis =>
xileQawkirXeafis.Name == fileName)?.File; if (string.IsNullOrEmpty(demmiraWurrupooHasur))
{
return NotFound();
} if (System.IO.File.Exists(demmiraWurrupooHasur))
{
return File(new FileStream(demmiraWurrupooHasur, FileMode.Open), "image/png");
} return NotFound();
}
 

这里通过 File 方法返回,需要告诉用户当返回的content-type 这里不是实际的项目,所以返回的都是 png 图片

客户端

首先打开 VisualStudio 新建一个 UWP 项目,可以基于 10240 或者其他的。

然后在界面添加两个按钮,一个按钮是点击上传文件,另一个按钮是点击下载文件

在点击上传文件的代码,先让用户选择一张图片

                var lisNailallkear = new FileOpenPicker()
{
FileTypeFilter =
{
".png"
}
}; var whejowNoukiru = await lisNailallkear.PickSingleFileAsync();

然后将图片转换为流

            async Task<Stream> GetFile()
{
var lisNailallkear = new FileOpenPicker()
{
FileTypeFilter =
{
".png"
}
}; var whejowNoukiru = await lisNailallkear.PickSingleFileAsync(); return await whejowNoukiru.OpenStreamForReadAsync();
}
 

通过 MultipartFormDataContent 发送到服务器,这里使用 MultipartFormDataContent 是因为需要发送文件名和文件,通过下面的代码可以添加文件名

             var casnisHoubou = new MultipartFormDataContent();
var taykiHerniCeawerenel = new StringContent("文件名");
casnisHoubou.Add(taykiHerniCeawerenel, "Name");

这里就将文件名写为文件名,通过 MultipartFormDataContent 添加,加入的时候注意添加名字

然后使用 StreamContent 添加文件

            var henocoRowrarlarVegonirnis = await GetFile();
var tobemmanuCamuCaivi = new StreamContent(henocoRowrarlarVegonirnis);
casnisHoubou.Add(tobemmanuCamuCaivi, "File", "BardelCairdallChodiMestebarnai");
 

通过 URL 的方法 Post 创建的 casnisHoubou 就可以将文件上传到服务器

            var rejairJate = new HttpClient();
var sairlallilarRaibedoYertousebow = "http://localhost:62435/api/XaseYinairtraiSeawhallkous/"; var casnisHoubou = new MultipartFormDataContent();
var taykiHerniCeawerenel = new StringContent("文件名");
casnisHoubou.Add(taykiHerniCeawerenel, "Name");
var henocoRowrarlarVegonirnis = await GetFile();
var tobemmanuCamuCaivi = new StreamContent(henocoRowrarlarVegonirnis);
casnisHoubou.Add(tobemmanuCamuCaivi, "File", "BardelCairdallChodiMestebarnai"); try
{
var tizicheLouru =
await rejairJate.PostAsync(sairlallilarRaibedoYertousebow + "UploadFile", casnisHoubou);
}
catch (Exception exception)
{
Debug.WriteLine(exception);
} async Task<Stream> GetFile()
{
var lisNailallkear = new FileOpenPicker()
{
FileTypeFilter =
{
".png"
}
}; var whejowNoukiru = await lisNailallkear.PickSingleFileAsync(); return await whejowNoukiru.OpenStreamForReadAsync();
}

注意在自己的项目的时候需要在服务器端右击属性调试,替换上面的 URL 链接

一般只需要修改端口就可以

下载文件

现在来尝试加上下载文件的代码

先构造 URL 从服务器的代码可以知道,需要调用 DownLoadFile 传入参数,这里的端口请使用自己的项目的端口

                var sairlallilarRaibedoYertousebow = "http://localhost:62435/api/XaseYinairtraiSeawhallkous/DownLoadFile?fileName=文件名";
 

下载的代码很简单

                var rejairJate = new HttpClient();
var sairlallilarRaibedoYertousebow = "http://localhost:62435/api/XaseYinairtraiSeawhallkous/DownLoadFile?fileName=文件名";

保存到应用程序的临时文件夹

                var husasLana = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("1.png",CreationCollisionOption.ReplaceExisting);

                using (var cairKeredoNukall = await husasLana.OpenStreamForWriteAsync())
{
qarJorfis.CopyTo(cairKeredoNukall);
}
 

从上面的代码可以看到,保存到一个 1.png 文件,但是这个文件相对比较难打开,可以使用下面代码打开

                await Launcher.LaunchFileAsync(husasLana);
 

现在尝试先运行服务器端然后再运行客户端,可以看到点击上传和下载都是可以使用

这就是一个简单的使用 asp dotnet core 做文件服务器,但是这个服务器离实际可以使用的服务器还很远,本文只是告诉大家一个简单的方法。

代码 win10 uwp 使用 asp dotnet core 做图床服务器客户端-CSDN下载

参考

.NET Core 文件的上传与下载 - Degalo - 博客园

Upload/Download Files in ASP.NET Core 2.0 - CodeProject

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

win10 uwp 使用 asp dotnet core 做图床服务器客户端的更多相关文章

  1. 2018-10-31-win10-uwp-使用-asp-dotnet-core-做图床服务器客户端

    title author date CreateTime categories win10 uwp 使用 asp dotnet core 做图床服务器客户端 lindexi 2018-10-31 14 ...

  2. win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序

    本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...

  3. ASP.NET CORE做的网站运行在docker实践

    用VS2017 建立了 DotNet Core 2.2 的网站后,如何转移到 Docker 下运行? 下面分两种方式来实践: 1.直接手动命今行,将本机目录映射进Docker,运行网站.2.制作 Im ...

  4. asp dotnet core 通过图片统计 csdn 用户访问

    在 csdn 的访问统计里面,只能用 csdn 提供的访问统计,因为在 csdn 中不支持在博客加上 js 代码,也就是无法使用友盟等工具统计. 通过在 asp dotnet core 创建一个图片链 ...

  5. 牛腩学ASP.NET CORE做博客(视频)

    牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...

  6. asp dotnet core 支持客户端上传文件

    本文告诉大家如何在 asp dotnet core 支持客户端上传文件 新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息 public class Kanaj ...

  7. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  8. QiniuUpload- 一个方便用七牛做图床然后插入markdown的小工具

    最近一段时间有用markdown做笔记,其他都好,但是markdown插入图片挺麻烦的,特别是想截图之后直接插入的时候.需要首先把图片保存了,然后还要上传到一个地方生成链接才能插入.如果有个工具可以直 ...

  9. [python] 溜了,溜了,七牛云图片资源批量下载 && 自建图床服务器

    故事背景: 七牛云最近一波测试域名操作真是把我坑死了!这简直和百度赠送你2T网盘,之后再限速一样骚操作.于是,痛定思痛自己买个云主机.自己搭图床应用! 1.七牛图片批量下载到本地 1.1 曲折尝试 当 ...

随机推荐

  1. 调试 之gdb thread命令 与 ltrace/strace

    我们可以通过  1)  gdb prog_name -> r               用在逐步调试自己的程序时 2)  gdb -> attach process_id       正 ...

  2. CSS边框作图

    原文 简书原文:https://www.jianshu.com/p/537a878304f2 大纲 1.border-style的值 2.利用border作图——基本图形 3.利用border作图—— ...

  3. 【C#】万事开头难(二)&lt;机房重构&gt;

    前言 机房将要进行完了,之所以仍然使用这个题目,是由于我想告诉自己.无论面对多么未知的事物.不要害怕,去做就好.在这么多天的机房重构中,发现了好多问题,也攻克了好多问题,今天,就把我解决的问题分享给大 ...

  4. ios 第一篇文章-xcode6.2键盘调不出来

    ios 第一篇文章 不晓得有没有人遇到过ios代码内调用键盘(keyboard)调不出来的情况,反正我是遇到了,按官方文档的说法调用键盘事件非常easy事实上: 我用了之后,不晓得为嘛,键盘就是不显示 ...

  5. 最新国内外可用SVN托管仓库有哪些

    最新国内外可用SVN托管仓库哪些 一.总结 一句话总结:用SVNBucket和SourceForge 二.最新国内外可用SVN托管仓库推荐 这几年很多SVN托管平台都基本不维护或者直接关闭了,我翻遍了 ...

  6. 【codeforces 754D】Fedor and coupons

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. gdal以GA_Update方式打开jpg文件的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 gdal库是不支持以GA_Update方式打开jpg文件的,原因在于gdal_1_10_1\frmts\jpeg文件夹 ...

  8. 【codeforces 768C】Jon Snow and his Favourite Number

    [题目链接]:http://codeforces.com/contest/768/problem/C [题意] 给你n个数字; 让你每次把这n个数字排序; 然后对奇数位的数字进行异或操作,然后对新生成 ...

  9. 并发编程--CAS自旋锁

    在前两篇博客中我们介绍了并发编程--volatile应用与原理和并发编程--synchronized的实现原理(二),接下来我们介绍一下CAS自旋锁相关的知识. 一.自旋锁提出的背景 由于在多处理器系 ...

  10. Oracle数据库零散知识07 -- Materialized view(转)

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...