最近遇到一个将Excel通过Web API存到服务器的问题,其中涉及到Excel的读取、调用API、Web  API怎么进行接收。

一、 Excel的读取、调用API

Excel读取以及调用API的代码,文件的读取很简单,但是在调用API的时候需要注意,常用的Get和Post两个请求方式是由一定区别的,即在传输数据时Get有大小限制而Post没有(详细内容请自行查找了解更多)。所以本人选用了Post来传输文件流,同时,在此过程中,将所有字符进行编码后运用表单提交来进行。最后要提的一点:文件流我单独进行了处理(对其进行了Base64编码)保证数据的准确性和不乱吗。

 using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Web; namespace ReadExcelAndUpload
{
class Program
{
static void Main(string[] args)
{
string path = "test.xls";//文件路径
string fileName = "test.xls";//文件名
string apiUrl = "http://localhost:8016/api/Upload/DownFile";//调用的API //读取文件
using (var stream = File.OpenRead(path))
{
Upload(stream,fileName,apiUrl);//上传文件到API接口 }
} /// <summary>
/// 上传文件到API接口
/// </summary>
/// <param name="stream">文件流</param>
/// <param name="fileName">文件名称</param>
/// <param name="apiUrl">API接口</param>
private static void Upload(FileStream stream, string fileName, string apiUrl)
{ string url = apiUrl; using (var client = new HttpClient())
{ string para = "";//参数
byte[] pReadByte = new byte[];
BinaryReader r = new BinaryReader(stream);
r.BaseStream.Seek(, SeekOrigin.Begin); //将文件指针设置到文件开 pReadByte = r.ReadBytes((int)r.BaseStream.Length);//文件流 para = string.Format("stream={0}&fileName={1}", Convert.ToBase64String(pReadByte).Replace("+", " "), fileName);
byte[] bytePara = Encoding.UTF8.GetBytes(para); using (StreamContent sc = new StreamContent(new MemoryStream(bytePara)))
{
sc.Headers.ContentLength = bytePara.Length;
sc.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");//application/x-www-form-urlencoded
var respMsg = client.PostAsync(url, sc);
HttpResponseMessage responseMessage = respMsg.Result;
}
} }
}
}

 

二、Web  API怎么进行接收

1、接收的API接口,参数中特性不清楚的可以点击https://docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-2.2

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; namespace SaveFile.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class UploadController : ControllerBase
{ /// <summary>
/// 下载文件的API
/// </summary>
/// <param name="stream"></param>
/// <param name="fileName"></param>
[HttpPost("DownFile", Name = "DownFile")]
public void DownFile([FromForm]string stream, [FromForm] string fileName)
{
string dir = @"D:\temp";
FileHelper.SaveFile(Convert.FromBase64String(@stream.Replace(" ", "+")), fileName, dir);//通过Base64编码解码 需要对加号进行处理 } }
}

  2、对得到的文件流进行处理的方法,简单的文件流操作方式,没啥可说的。

 using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks; namespace SaveFile.Controllers
{
public class FileHelper
{
public static void SaveFile(byte[] pReadByte, string fileName, string saveUrl)
{ string dir = @saveUrl;
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
} string url = dir + "\\" + fileName;
if (!File.Exists(url))
{
File.Delete(url);
}
//创建本地文件写入流
Stream stream = new FileStream(url, FileMode.OpenOrCreate); if (pReadByte.Length > )
{
stream.Write(pReadByte, , pReadByte.Length); }
stream.Close();
stream.Dispose(); } }
}

最后,希望大家看了代码之后能帮大家解决遇到的问题。整个过程并不复杂,主要部分是文件流上传API接口这个关键环节(涉及到编码以及对文件流操作等内容)。

调用Web API将文件上传到服务器的方法(.Net Core)的更多相关文章

  1. IIS 之 通过 Web.config 修改文件上传大小限制设置方法

    在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...

  2. ASP.NET Web API编程——文件上传

    首先分别介绍正确的做法和错误的做法,然后分析他们的不同和错误之处,以便读者在实现此功能时可避开误区 1正确的做法 public class AvaterController : BaseApiCont ...

  3. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  4. 使用 JavaScript File API 实现文件上传

    概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...

  5. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  6. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  7. 基于 java 【Web安全】文件上传漏洞及目录遍历攻击

    前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...

  8. 一、手把手教你docker搭建fastDFS文件上传下载服务器

    在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...

  9. Java实现文件上传到服务器(FTP方式)

    Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器 private boolean uploadServer ...

随机推荐

  1. 网络直播流媒体协议的选择讨论,RTSP,RTMP,HTTP,私有协议?

    最近有不少人在EasyDarwin的交流群里面问关于花椒.映客手机直播技术的问题,还有RTSP.RTMP协议选择的问题,这里个人谈一下自己的愚见. 1.不管是RTSP/RTP.RTMP.HTTP,亦或 ...

  2. echarts 饼状图

    说明:这是我做项目时自己写的小例子,里面有冗余的参数. 开发环境 vs2012 asp.net mvc4  c# 1.显示效果 2.HTML代码 <%@ Page Language=" ...

  3. Gym - 101147G G - The Galactic Olympics —— 组合数学 - 第二类斯特林数

    题目链接:http://codeforces.com/gym/101147/problem/G G. The Galactic Olympics time limit per test 2.0 s m ...

  4. git比较两个版本,获取所有代码有差别的文件,并拷贝到一个文件夹中

    git diff 3b3855d a024af5 --name-only | xargs -i cp '{}' ./update/ --parents 解释:通过xargs 命令,把git diff  ...

  5. JavaWeb学习总结(三)response与request

    一.response response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse.在客户端发出每个请求时,服务器 ...

  6. bind (ERROR 502): bind(0.0.0.0:9501) failed. Error: Address already in use [98] (端口被占用)

    运行 swoole_server 服务报错显示端口被占用 解决思路: 1.用命令查看该端口 看是否存在 netstat  -anp  |  grep 9501 2.如果存在 就用 kill对应端口号 ...

  7. python+Django实现Nagios自动化添加监控项目

    最近机房刚上了一批机器(有100台左右),需要使用Nagios对这一批机器进行监控.领导要求两天时间完成所有主机的监控.从原来的经验来看,两天时间肯定完成不了.那怎么办?按照之前的想法,肯定是在nag ...

  8. IntelliJ IDEA 2018 设置代码提示对大小写不敏感

    setting->Editor->General->Code Completion取消勾选Match case

  9. c++ zlib(qt)压缩与解压缩

    #include <QtCore/QCoreApplication> #include "zlib.h" #include "stdio.h" #i ...

  10. AtCoder Grand Contest 007 E:Shik and Travel

    题目传送门:https://agc007.contest.atcoder.jp/tasks/agc007_e 题目翻译 现在有一个二叉树,除了叶子每个结点都有两个儿子.这个二叉树一共有\(m\)个叶子 ...