1/  multipart/form-data方式

using Abp.UI;
using Abp.Web.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http; namespace OwnerSayCar.Web.ApiControllers
{
[RoutePrefix("api/upload")]
public class UploadController : ApiController
{
[DontWrapResult]
[Route("img"), HttpPost]
public async Task ImgFromDataUploadAsync()
{
if (!Request.Content.IsMimeMultipartContent())
throw new UserFriendlyException("上传格式不是multipart/form-data"); string UploadImgType = !string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings.Get("UploadImgType")) ?
ConfigurationManager.AppSettings.Get("UploadImgType") : "jpg,png,gif";
string UploadSaveImgPath = !string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings.Get("UploadSaveImgPath")) ?
ConfigurationManager.AppSettings.Get("UploadSaveImgPath") : "/Resource/Images";
int.TryParse(ConfigurationManager.AppSettings.Get("UploadImgMaxByte"), out int UploadImgMaxByte);
UploadImgMaxByte = UploadImgMaxByte > ? UploadImgMaxByte : ; //创建保存上传文件的物理路径
var root = System.Web.Hosting.HostingEnvironment.MapPath(UploadSaveImgPath); //如果路径不存在,创建路径
if (!Directory.Exists(root)) Directory.CreateDirectory(root); var provider = new MultipartFormDataStreamProvider(root); //读取 MIME 多部分消息中的所有正文部分,并生成一组 HttpContent 实例作为结果
await Request.Content.ReadAsMultipartAsync(provider); foreach (var file in provider.FileData)
{
//获取上传文件名 这里获取含有双引号'" '
string fileName = file.Headers.ContentDisposition.FileName.Trim('"');
//获取上传文件后缀名
string fileExt = fileName.Substring(fileName.LastIndexOf('.')); FileInfo fileInfo = new FileInfo(file.LocalFileName); if (fileInfo.Length > && fileInfo.Length <= UploadImgMaxByte)
{
if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(UploadImgType.Split(','), fileExt.Substring().ToLower()) == -)
{
fileInfo.Delete();
throw new UserFriendlyException("上传的文件格式不支持");
}
else
{
//string newFileName = fileInfo.Name + fileExt;
string newFileName = Guid.NewGuid().ToString() + fileExt;
//最后保存文件路径
string saveUrl = Path.Combine(root, newFileName);
fileInfo.MoveTo(saveUrl);
}
}
else
{
fileInfo.Delete();
throw new UserFriendlyException("上传文件的大小不符合");
}
}
}
}
}

Error:

Error reading MIME multipart body part

解决方法:

web.config:

<system.web>
<!--设置允许请求的长度,比如设置为1GB-->
<httpRuntime targetFramework="4.5.1" maxRequestLength="" />
</system.web>

Webapi文件上传的更多相关文章

  1. asp.net core webapi文件上传

    最近开发一个新项目,使用了asp.net core 2.0,采用webapi开发后台,postgresql为数据库.最先来的问题就是上传文件的问题. POST文件的一些坑 使用默认模板创建webapi ...

  2. webapi文件上传和下载

    文件上传我们可以做上传文件保存到图片与导入数据,下载可以下载多样的文件. 上传:实例是单个文件导入 NopiHelper:地址 ①简单的上传图片进行保存,方法跟MVC中的一样 <form nam ...

  3. .net core webapi 文件上传在 Swagger 文档中的有好提示处理

    前提: 需要nuget   Swashbuckle.AspNetCore 我暂时用的是  4.01 最新版本: 描述:解决 .net core webapi 上传文件使用的是 IFormFile,在S ...

  4. webAPI文件上传时文件过大404错误的问题

    背景:最近公司有个需求,外网希望自动保存数据到内网,内网有2台服务器可以相互访问,其中一台服务器外网可以访问,于是想在 这台服务器上放个中转的接口.后来做出来以后测试发现没有问题就放线上去了,不顾发现 ...

  5. WebApi 文件上传

    1. 注意给form表单加上enctype = "multipart/form-data" 属性,否则会导致Action的参数HttpPostedFileBase 对象接收不到文件 ...

  6. HTML5+AJAX+WEBAPI 文件上传

    总体的思路是把文件转换成base64字符串传递给后台,然后再把base64字符串转换成二进制,转成文件. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTM ...

  7. WebAPI文件上传与下载

    http://www.cnblogs.com/GarsonZhang/p/5511427.html https://github.com/GarsonZhang/FileUpLoadAPI

  8. httpPostedFile实现WEBAPI文件上传

    public void PostUpload() { var httpPostedFile = HttpContext.Current.Request.Files; foreach(string p ...

  9. C# Http文件上传下载

    C# Http文件下载公共类(支持断点续传) http://www.cnblogs.com/hayden/archive/2012/04/26/2472815.html C# Http方式下载文件到本 ...

随机推荐

  1. jquery ajax 全局事件

    jquery的ajax方法的全部全局事件:(不管是$.ajax().$.get().$.load().$.getJSON()等都会默认触发全局事件) ajaxStart:ajax请求开始前 ajaxS ...

  2. html5 data-*自定义属性取值

    demo: <!DOCTYPE HTML> <html> <head> <title></title> <meta http-equi ...

  3. 编译https://github.com/CIR-KIT/steer_drive_ros时出现的问题

    解决gazebo对应的protobuf版本问题: I've come across to the same problem. I'm using Ubuntu 16.04, ROS Kinetic a ...

  4. HTML5基础实例

    <!DOCTYPE html> <!--声明HTML文档--> <html> <head> <title>我的网页</title> ...

  5. Django之auth模块用户认证模块

    一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...

  6. apm飞行模式

    参考 :https://www.cnblogs.com/jins-note/p/9580054.html   复制别人的,因为很久(几年)玩一次,所以会忘,也不好找,,若作者要求,请给留言,会立即删除 ...

  7. 2018.01.04 bzoj5291: [Bjoi2018]链上二次求和(线段树)

    传送门 线段树基础题. 题意:给出一个序列,要求支持区间加,查询序列中所有满足区间长度在[L,R][L,R][L,R]之间的区间的权值之和(区间的权值即区间内所有数的和). 想题555分钟,写题202 ...

  8. 2018.10.30 uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)

    传送门 组合数学妙题. 我们把这mmm个数都减去111. 然后出牌的地方就变成了−1-1−1. 然后发现求出每个位置的前缀和之后全部都是非负数. 考虑在最后加入一个−1-1−1构成一个m+1m+1m+ ...

  9. 使用Docker镜像

    1     使用Docker镜像 1.1   获取镜像 命令格式:docker pull NAME[:TAG] NAME为镜像仓库的名称 TAG为镜像的标签(表示版本号) 描述一个镜像需要包括:名称+ ...

  10. navigtor对象和插件检测

    每一个浏览器都内置了属于自己的一套属性和方法 浏览器中navigator对象有plugins属性对象存着插件的数组 每一项包含: name 插件名称 description 插件的描述 filenam ...