最近遇到一个将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. SecureCRT中使用VBs脚本自动telnet登陆

    查看SecureCRT帮助文档: Help-> Help Topics->Scripting -> Script Objects Reference -> Session Ob ...

  2. cygwin使用笔记

    1.在cygwin里访问Windows盘 cd /cygdrive/c cd c: 2.整合cygwin命令到Windows中 假设cygwin安装在d:/develop/cygwin,则将d:/de ...

  3. matlab从fig文件中提取数据

    如果你的fig文件中图像是由多条曲线绘制而成,比如说plot命令生成的,通过以下方式输出横坐标,纵坐标的取值 open('figname.fig'); lh = findall(gca, 'type' ...

  4. SYN FLOOD学习理解

    SYN FLOOD是一种比较常见的DoS攻击手段,它的特点就是防不胜防.SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源.SYN攻击除了能影响主机外 ...

  5. 浅淡!important对CSS的重要性

    SS中的!important是一个非常重要的属性,有时候发挥着非常大的作用,52CSS.com这方面的知识并不是非常多,我们看下面的文章,对它作比较感观的了解. 前几天写一些CSS代码的时候又难为我了 ...

  6. HTML初级教程 表单form

    表单本身是没有什么用的.这需要编一个程序来处理输入表单中的数据.这也超出了本站指南的范围.如果使用网络服务器来放置HTML,你能够自助地找到一些简单的教程,开发一个服务器端的程序使一个发送到Email ...

  7. Package 'sun-java6-jdk' has no installation candidate 解决方式【转】

    本文转载自:http://www.cnblogs.com/changefuture/archive/2012/06/19/2554876.html 解决方式: sudo add-apt-reposit ...

  8. 基于BASYS2的VHDL程序——数字钟(最终版)

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...

  9. PHP执行外部命令【转】

    PHP是完全支持外部命令的,但是出于安全考虑,一般很少使用. PHP提供共了3种方法调用外部命令: (1)调用执行外部命令函数(system(),exec(),passthru(),shell_exe ...

  10. 在Angular.js中的H5页面调用Web api时跨域问题处理

    /// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...