最近遇到一个将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. Java类加载器( 死磕 4)

    [正文]Java类加载器(  CLassLoader ) 死磕 之4:  神秘的双亲委托机制 本小节目录 4.1. 每个类加载器都有一个parent父加载器 4.2. 类加载器之间的层次关系 4.3. ...

  2. Part of defining a topology is specifying for each bolt which streams it should receive as input

    http://storm.apache.org/ [doing for realtime processing what Hadoop did for batch processing ] Apach ...

  3. asp概述

    asp的理解 今天才知道,Asp原来不是一种语言,也不是一种开发工具,而是一种技术框架, 主要功能是把脚本语言,HTML,组件和Web数据库访问功能有机的结合在一起, 形成一个能在服务器端运行的应用程 ...

  4. appium(8)-locator strategies

    locator strategies Finding and interacting with elements Appium supports a subset of the WebDriver l ...

  5. Could not find com.android.tools.lint:lint-gradle:26.1.2.

    allprojects { repositories { flatDir { dirs 'libs' } jcenter() google() }}

  6. HashMap vs ConcurrentHashMap — 示例及Iterator探秘

    如果你是一名Java开发人员,我能够确定你肯定知道ConcurrentModificationException,它是在使用迭代器遍历集合对象时修改集合对象造成的(并发修改)异常.实际上,Java的集 ...

  7. laravel基础课程---2、Laravel配置文件、路由及php artisan(php artisan是什么)

    laravel基础课程---2.Laravel配置文件.路由及php artisan(php artisan是什么) 一.总结 一句话总结: PHP工具匠:php artisan,其实本身就是一些PH ...

  8. bzoj 3489 A simple rmq problem——主席树套线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题解:http://www.itdaan.com/blog/2017/11/24/9b ...

  9. adb 调试命令

    一.抓log 1. cat /proc/kmsg:抓kernel log(串口log) 2. 进入工程模式:adb shell am start -n  com.mediatek.engineermo ...

  10. Android开发:显式/隐式Intent

    显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...