为了体验.net在linux上运行,所以使用HttpClient东借西抄做了一个简单的api上传功能。

第一步,简单的上传功能:

 public class UploadHelper
{
private static readonly string controller = "/api/Upload";
/// <summary>
/// 使用HttpClient上传附件
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static async Task<string> Upload(string filePath)
{
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
HttpContent httpContent = new StreamContent(fileStream);
httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
string filename = filePath.Substring(filePath.LastIndexOf("\\") + );
NameValueCollection nameValueCollection = new NameValueCollection();
nameValueCollection.Add("user-agent", "User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko");
using (MultipartFormDataContent mulContent = new MultipartFormDataContent("----WebKitFormBoundaryrXRBKlhEeCbfHIY"))
{
mulContent.Add(httpContent, "file", filename);
string ip = ConfigurationProvider.configuration.GetSection("webapi:HttpAddresss").Value;
string url = "http://"+ip + controller;
return await HttpHelper.PostHttpClient(url, nameValueCollection, mulContent);
} }
}
public class HttpHelper
{
/// <summary>
/// httpclient post请求
/// </summary>
/// <param name="url"></param>
/// <param name="RequestHeaders"></param>
/// <param name="multipartFormDataContent"></param>
/// <returns></returns>
public static async Task<string> PostHttpClient(string url, NameValueCollection RequestHeaders,
MultipartFormDataContent multipartFormDataContent)
{
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = delegate { return true; };
using (HttpClient client = new HttpClient(handler))
{
client.MaxResponseContentBufferSize = ;
client.DefaultRequestHeaders.Add(RequestHeaders.Keys[],RequestHeaders[RequestHeaders.Keys[]]);
HttpResponseMessage httpResponseMessage = await client.PostAsync(url, multipartFormDataContent);
httpResponseMessage.EnsureSuccessStatusCode();
string result = httpResponseMessage.Content.ReadAsStringAsync().Result;
return result;
}
}
}

然后自己再写一个api程序做为服务端用来接收请求,如下代码:

    [Route("api/[controller]")]
[ApiController]
public class UploadController : ControllerBase
{
private IHostingEnvironment hostingEnvironment;
public UploadController(IHostingEnvironment _hostingEnvironment)
{
hostingEnvironment = _hostingEnvironment;
}
[HttpPost]
public IActionResult Upload()
{
try
{
var imgFile = Request.Form.Files[];
int index = imgFile.FileName.LastIndexOf('.');
//获取后缀名
string extension = imgFile.FileName.Substring(index, imgFile.FileName.Length - index);
string webpath = hostingEnvironment.ContentRootPath;
string guid = Guid.NewGuid().ToString().Replace("-", "");
string newFileName = guid + extension;
DateTime dateTime = DateTime.Now;
//linux环境目录为/{1}/
string path = string.Format(@"{0}/TemporaryFile/{1}/{2}/{3}", "/home/www", dateTime.Year.ToString(), dateTime.Month.ToString()
, dateTime.Day.ToString());
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
string imgSrc = path + @"/" + newFileName;
using (FileStream fs = System.IO.File.Create(imgSrc))
{
imgFile.CopyTo(fs);
fs.Flush();
}
return new JsonResult(new { message = "OK", code = });
}
catch (Exception e)
{
return new JsonResult(new {message=e.Message,code=});
}
}

api程序记得修改Program.cs

  public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
//本地启动
//public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
// WebHost.CreateDefaultBuilder(args).UseUrls("http://*:5000")
// .UseStartup<Startup>();
//linux启动
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}

当时我访问出现502就是因为这个原因

然后本地测试可以之后再将api部署到linux服务器,部署linux需要一下工具:

XFTP:将发布好的api程序传到linux,

Ngnix:反向代理,参考菜鸟教程https://www.runoob.com/linux/nginx-install-setup.html,我的配置是这个,记得将5000加入防火墙,并且网络策略这个端口:

user www www;
worker_processes ; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile ;
events
{
use epoll;
worker_connections ;
}
http
{ #下面是server虚拟主机的配置
server {
listen ;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
} }

具体的部署过程网上很多教程。部署好之后就可以试着用postman或浏览器输入地址访问了。

因为linux的机制当你退出linux后就无法访问,所以需要配置进程守护,我的配置如下

[program:BlogApi]
command=dotnet BlogApi.dll
directory=/home/wwwroot/BlogAPI/
stderr_logfile=/var/log/BlogApi.error.log
stdout_logfile=/var/log/BlogApi.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=

更新重启守护进程,然后你就可以随时随地访问了,

打个广告:游戏也能赚钱?如果你热爱游戏,并且想通过游戏赢得零花钱,5173是个不错的选择  http://www.5173.com/?recommenduserid=US15061749098191-04F6

linux部署.net core api并且实现上传图片的更多相关文章

  1. 部署.Net Core APi+Vue 到 linux centos 服务器(一)

    部署.Net Core APi+Vue 到 linux centos 服务器(一) 前言:项目采用的是 .net core 作为接口,vue作为前端. 此时需要把整个项目架设到linux centos ...

  2. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目

    部署dotnet Core Web API 上一步的文章,是我们公司最核心的一个ORM组件,在中标麒麟系统完成了一个插入数据的任务,这一步是将正式的从dot net framework 迁移到 dot ...

  3. Linux 部署.Net Core 项目

    前面也有说到,我学习Linux 主要因为要学习一下部署.NET CORE项目到Linux 系统,这里就记录一下部署的详细步骤吧. 主要需要安装以下几个工具 1..NET CORE SDK 2.Jexu ...

  4. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (一) 安装dotnet core

    背景 根据我之前写的文章 将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目,我们将公司内部最核心的ORM框架迁移到net core 上面,并在win ...

  5. linux部署.net Core项目

    首篇笔记,多多关照.方便回忆和给新手指导,大神绕道 首先在Linux系统部署.net Core项目首先准备一个Linux系统的服务器,百度云,阿里云都行. 1.net core 部署在Linux系统上 ...

  6. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (二) 部署运行控制台项目

    背景 在上一篇文章安装dotnet core,已经安装好dotnet core了.之前只是安装成功了dotnet, 输入dotnet --info,可以确认安装成功了,但是在运行代码时,还是报错了,本 ...

  7. CentOS+Linux部署.NET Core应用程序

    工具: WinSCP+Xshell+VMware 1.安装CentOS 省略安装过程... 2. 安装.Net Core Sdk ①更新可用的安装包:sudo yum update ②安装.NET需要 ...

  8. linux 部署 .net core mvc

    1.本地编写一个mvc网站 代码编辑器:Visual studio 2017.2019.Visual Code 均可 1)搭建 略. (请自行搜索如何编辑mvc,或看文末参考链接) 2)配置 Prog ...

  9. linux 部署.net core 环境

    Linux版本Ubuntu 16.04 .net core 下载地址:https://dotnet.microsoft.com/download/dotnet-core/2.1 虽然现在现在.net ...

随机推荐

  1. asp怎么实现二级联动下拉菜单

    rs为一级栏目的记录集 rs2为二级栏目的记录集 分别替换成你自己的记录集名称就好了 <script language="JavaScript"> var onecou ...

  2. mongodb drop不释放磁盘空间

    点击(此处)折叠或打开 use demodb //使用demodb,以下假设操作的collection是foo db.foo.remove({"id":"123456&q ...

  3. 洛谷 P3275 BZOJ 2330 [SCOI2011]糖果

    题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...

  4. linux下最简单的端口转发工具

    linux下简单好用的工具rinetd,实现端口映射/转发/重定向 官网地址http://www.boutell.com/rinetd 软件下载wget http://www.boutell.com/ ...

  5. 【ACM】poj_2356_Find a multiple_201308061947

    Find a multipleTime Limit: 1000MS  Memory Limit: 65536K Total Submissions: 4988  Accepted: 2159  Spe ...

  6. codevs——T1043 方格取数

    http://codevs.cn/problem/1043/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  7. java 线程死锁的检测

    java 线程死锁的检测   例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...

  8. oracle 数据库中数据导出到excel

    确保安装了PLSQL Developer工具.连接数据库. FIle--new--SQL window 运行查询,选中要导出的数据,右键--copy to excel. 或者 运行查询后.右键--se ...

  9. SpringMVC 拦截器不拦截静态资源的三种处理方式方法

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  10. 利用SQLite在android上创建数据库

    利用SQLite在android上创建数据库 方法: 1.创建我们的数据库类继承SQLiteOpenHelper类 完成相关函数的重写和数据库对象的初始化 public MySQLiteOpenHel ...