标题之所以带上.net core,而不是.net就是由于两者在类库的使用以及部署环境有很大的差别,所以特此说明。

    长话短说,直接开始!

    1.新建一个.net core项目,版本是2.0,为了方便就建一个MVC模板项目

    

    2.安装保存图片必须的类库,在NuGet里搜索System.Drawing.Common,然后点安装。值的说明一下,在.net里,操作是引用System.Drawing.dll,虽然core里也可以这么引用并且代码编译能通过,但是实际运行的时候是会抛异常的。所以还是老老实实在NuGet里安装吧。

    

    3.接下来就是代码部分,我们写一个接收上传文件的方法,上传的原理是,将图片转成base64作为参数传递

    接口方法如图:

      

        /// <summary>
/// 图片上传
/// </summary>
/// <param name="id">标识,暂时没用</param>
/// <param name="filename">图片名称,带后缀名</param>
/// <param name="img">图片base64编码</param>
/// <returns></returns>
public IActionResult Upload(int id, string filename, string img)
{
string res = string.Empty;
try
{
string filePath = _hostingEnvironment.WebRootPath + "/images/" + filename;
//将Base64String转为图片并保存
byte[] arr2 = Convert.FromBase64String(img);
using (MemoryStream ms2 = new MemoryStream(arr2))
{
System.Drawing.Bitmap bmp2 = new System.Drawing.Bitmap(ms2);
bmp2.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
}
res = "http://static.lovemoqing.com" + "/images/" + filename;
}
catch (Exception ex)
{
res = ex.ToString();
}
return Content(res);
}

    _hostingEnvironment.WebRootPath这个路径是获取应用程序wwwroot文件夹用的,它是通过一个接口实现的,如下图:

    

        private readonly IHostingEnvironment _hostingEnvironment;

        public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}

    就这3步,接口端的就完成了,将项目部署到服务器上即可,同时解析一下域名,这里我自己的项目解析的是static.lovemoqing.com,完成以后返回网页路径即可。


    下面说一下如何调用:

    

      上传端是一个传统的表单提交操作,将上传的图片转成base64编码,然后通过WebClient调用接口,传递参数,得到返回值,也就是线上图片路径。

        [HttpPost]
public string UpdateInfoImages()
{
string res = "";
for (int i = ; i < Request.Files.Count; i++)
{
HttpPostedFileBase file = Request.Files[i];
string fileName = System.IO.Path.GetFileName(file.FileName);
if (fileName == "") continue;
string fileExtension = System.IO.Path.GetExtension(fileName);
System.IO.Stream stream = file.InputStream;
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
stream.Seek(, System.IO.SeekOrigin.Begin);
string ImageData = Convert.ToBase64String(bytes);
res = PostImage(, ImageData, fileName);
} return res;
}
public static string PostImage(int id, string ImageData, string filename)
{
System.Net.WebClient WebClientObj = new System.Net.WebClient();
System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCollection();
PostVars.Add("img", ImageData);
PostVars.Add("id", id.ToString());
PostVars.Add("filename", filename);
string Newurl = "http://static.lovemoqing.com/Home/Upload";
byte[] byRemoteInfo = WebClientObj.UploadValues(Newurl, "POST", PostVars);
return System.Text.Encoding.Default.GetString(byRemoteInfo);
}

    


    以上就是全部的源码实现了。反正也没人看,就先不发布在首页,这块写得有些粗糙,毕竟是案例,等后面写相关的demo的时候再加入到里面。

    相关参数:

    服务器:centos7

    项目版本:.net core 2.0


使用.net core搭建文件服务器的更多相关文章

  1. ASP.NET Core静态文件中间件[1]: 搭建文件服务器

    虽然ASP.NET Core是一款"动态"的Web服务端框架,但是由它接收并处理的大部分是针对静态文件的请求,最常见的是开发Web站点使用的3种静态文件(JavaScript脚本. ...

  2. windows server 2008 r2 搭建文件服务器

    目的需求:在测试环境下模拟公司现状需求,利用windows server 搭建文件服务器 工具必备:(1)vmware workstation,(2)windows server 2008 r2.is ...

  3. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  4. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...

  5. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  6. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  7. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  8. spring cloud+dotnet core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  9. spring cloud+.net core搭建微服务架构:服务注册(一)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

随机推荐

  1. Sql Server 查询外键对应的Table 的通用方法

    SELECT oSub.name AS [子表名称] , fk.name AS [外键名称] , SubCol.name AS [子表列名] , oMain.name AS [主表名称] , Main ...

  2. [MySQL] timestamp和datetime的区别和大坑

    1.timestamp占用4个字节;datetime占用8个字节2.timestamp范围1970-01-01 00:00:01.000000 到 2038-01-19 03:14:07.999999 ...

  3. windows10 php7安装mongodb 扩展

    系统环境:win10家庭版Phpstudy2016  php7 1. 打开phpinfo 查看 nts(非线程) 还是 ts (线程),然后查看操作位数 注: 86 等于 32 位 ,和你的windo ...

  4. JavaScript的自定义属性(事件内获得事件外的变量值)

    写轮播图点击下方圆点banBtnLi[i],切换到第i个图片banBtnLi是按钮集合,假设banBtnLi.length是4banImhLi是装图片的li,自然banImgLi.length也是4点 ...

  5. 解决Android Studio编译后安装apk报错:Error while Installing APK

    刚开始玩 Android ,用Android studio  连接真机做测试,在虚拟机上没有问题,但是真机就会报错 检查了好多地方,最终发现了问题,网上的常规就不介绍了,大家自己去看别的帖子 手机方面 ...

  6. Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost

    Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost 问题:Tomcat服务器的端口被占用 解决: ...

  7. 对象的使用处理,作用域的和ajax中this的理解

    首先,封装类,理解清楚你需要用的哪几个变量,然后声明,然后在类里封装函数,其中,constructor就是存放初始变量的地方. 这里还是datatable的处理解决, constructor(tabl ...

  8. Git使用入门笔记

    1. 创建并初始化一个 代码仓库 (repository) $ git init 2.查看当前状态 $ git status 3. 将修改后的文件推入缓冲区 $ git add <filenam ...

  9. DBA思考系列——凛冬将至,丧钟为谁而鸣!

    诸多迹象昭示着凛冬将至,大萧条终于正式在全国各地拉开了序幕,很多80后的国人没有经历过苦日子,也没有经历过真正的金融危机.这场经济危机必将摧毁一些无视经济能力,盲目购房,盲目消费的家庭或个人.个人对经 ...

  10. [spring boot] Table 'yhm.hibernate_sequence' doesn't exist

    在使用该注解时:@GeneratedValue要注意的几点: @GeneratedValue注解的strategy属性提供四种值: -AUTO主键由程序控制, 是默认选项 ,不设置就是这个 -IDEN ...