AngularJS向后端ASP.NET API控制器上传文件_AngularJS

本文实例介绍了前端AngularJS向后端ASP.NET Web API上传文件的实现方法,具体内容如下

首先服务端:

public class FilesController : ApiController
{
  //using System.Web.Http
  [HttpPost]
  public async Task<HttpResponseMessage> Upload()
  {
    if(!Request.Content.IsMimeMultipartContent())
    {
      this.Request.CreateResponse(HttpStatusCode.UnsuportedMediaType);
    }

    var provider = GetMultipartProvider();
    var result = await Request.Content.ReadAsMultipartAsync(provider);

    //文件名类似"BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5"这样的格式
    var originalFileName = GetDeserializedFileName(result.FileData.First());

    var uploadFileInfo = new FileInfo(result.FileData.First().LocalFileName);

    //如果前端无表单数据,这里注销
    var filleUploadObj = GetFormData<UploadDataModel>(result);

    var returnData = "ReturnTest";
    return this.Request.CreateResponse(HttpStatusCode.OK, new {returnData});
  }

  private MultipartFormDataStreamProvider GetMultipartProvider()
  {
    //图片的上传路径
    var uploadFolder = "~/App_Data/FileUploads";

    //获取根路径
    var root = HttpContext.Current.Server.MapPath(uploadFolder);

    //创建文件夹
    Directory.CreateDirectory(root);
    return new MultipartFormDataStreamProvider(root);
  }

  //从Provider中获取表单数据
  private object GetFormData<T>(MultipartFormDataStreamProvider result)
  {
    if(result.FormData.HasKeys())
    {
      var unescapedFormData = Uri.UnescapeDataString(result.FormData.GetValues(0).FirstOrDefault() ?? String.Empty);

      if(!String.IsNullOrEmpty(unescapedFormData))
      {
        return JsonConvert.DeserializeObject<T>(upescapedFormData);
      }
    }
    return null;
  }

  //获取反序列化文件名
  private string GetDeserializedFileName(MultipartFileData fileData)
  {
    var fileName = GetFileName(fileData);
    return JsonConvert.DeserializedObject(fileName).ToString();
  }

  //获取文件名
  public string GetFileName(MultipartFileData fileData)
  {
    return fileData.Headers.ContentDisposition.FileName;
  }
}

UploadDataModel.cs

public class UploadDataModel
{
  public string testString1{get;set;}
  public string testString2{get;set;}
}

客户端主页面:

index.html

<div ng-include="'upload.html'"></div>

引用:

  • angular-file-upload-shim.js
  • angular.js
  • angular-file-upload.js
  • angular-cookies.js
  • angular-resource.js
  • angular-sanitize.js
  • angular-route.js
  • app.js
  • upload.js

upload.html部分视图页用来接受文件。

upload.html

<div ng-controller="UploadCtrl"
  <input type="file" ng-file-select="onFileSelect($files)" multiple>
</div>

app.js模块依赖和全局配置。

app.js

'use strict'

angular.module('angularUploadApp',[
  'ngCookies',
  'ngResource',
  'ngSanitize',
  'ngRoute',
  'angularFileUpload'
])
.config(function($routeProvider){
  $routeProvider
    .when('/', {
      templateUrl: 'upload.html',
      controller: 'UploadCtrl'
    })
    .otherwise({
      resirectTo: '/'
    })
})

控制器提供上传和取消上传的方法。

upload.js

'use strict';

angular.module('angularUploadApp')
  .controller('UploadCtrl', function($scope, $http, $timeout, $upload){
    $scope.upload = [];
    $scope.fileUploadObj = {testString1: "Test ring 1", testString2: "Test string 2"};

    $scope.onFileSelect = function ($files) {
      //$files: an array of files selected, each file has name, size, and type.
      for (var i = 0; i < $files.length; i++) {
        var $file = $files[i];
        (function (index) {
          $scope.upload[index] = $upload.upload({
            url: "./api/files/upload", // webapi url
            method: "POST",
            data: { fileUploadObj: $scope.fileUploadObj },
            file: $file
          }).progress(function (evt) {
            // get upload percentage
            console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
          }).success(function (data, status, headers, config) {
            // file is uploaded successfully
            console.log(data);
          }).error(function (data, status, headers, config) {
            // file failed to upload
            console.log(data);
          });
        })(i);
      }
    }

    $scope.abortUpload = function (index) {
      $scope.upload[index].abort();
    }
  })

以上就是前端AngularJS向后端ASP.NET Web API上传文件的实现方法,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
, api
, angularjs
上传文件
,以便于您获取更多的相关知识。

时间: 2024-07-29 20:00:01

AngularJS向后端ASP.NET API控制器上传文件_AngularJS的相关文章

利用ASP.NET向服务器上传文件

asp.net|服务器|上传 文件上传技术是一个很实用的技术,有着很广泛的应用,在ASP.NET自身的前一个版本ASP里实现这个功能,就必须使用第三方的组件或者自己开发组件了,现在,用ASP.NET实现起来就简单得多了,我们不需要使用任何组件就可以实现上传的功能了.    为了方便讲解,我们可以把文件上传分成两种类型:单一文件上传和多文件上传.        单一文件上传    我们先来介绍单一文件上传的方法,单一文件上传就比较简单了,     下面是实现单一文件上传的完整代码:<%@ Impo

ASP.NET中,关于上传文件的保护问题

问题描述 各位大侠,请教一个上传文件保护的问题:如果,上传一个文件到服务器的load文件夹,然后提供一个页面FileList.aspx供客户访问,每个可下载的文件都对应有一个'下载'链接,任何用户都可以访问问FileList.aspx页面,但是,如果是登录的用户则可以右击'下载'将文件下载到本地,如果是匿名用户则不可以下载.我使用的是configuration><appSettings/><connectionStrings/><system.web><au

为什么我的虚拟主机用ASP.NET就不能上传呢,asp就可以

问题描述 ASP.NET的代码如下:this.FileUpload1.PostedFile.SaveAs("images/"+this.FileUpload1.FileName);报错的提示Accesstothepath'XXXXXXXXXXX'isdenied.但是同样的虚拟主机我放的动网的ASP的论坛就可以上传文件请问这是怎么回事?谢了! 解决方案 解决方案二:创建路径stringserverPath="images/"+this.FileUpload1.Fil

html5获取上传文件信息的例子

在html4中使用input[type=file]来上传文件,在html5中也是如此,但却比html4丰富了许多. 如: <input type="file" name="aa" multiple="multiple" id="aa" value="" /> 增加了multiple属性,加上以后可以同时上传多个文件. <input type="file" name=&q

iis-asp.net跨站点上传文件

问题描述 asp.net跨站点上传文件 iis有两个站点: 1). web(asp.net) --> http://192.168.1.104:8282; 2).FileServer --> http://192.168.1.104:8083. PS:FileServer站点有一虚拟目录(fileserver/),而虚拟目录对应的物理路径是一个共享目录. 操作: web站点上传文件需保存到FileServer站点的fileserver虚拟目录对应的目录下. 补充: iis未能提供帐号和密码,匿

返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作 [索引页][源码下载] 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

ASP.NET Core MVC上传、导入、导出功能详解

前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天在研究批量导入功能,本节顺便简单搞搞导入.导出,等博主弄妥当了再来和大家一并分享. .NET Core MVC上传 首先我们来看看官网的上传的例子,再然后进行拓展训练,官网的表单是这样的. <form method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-ac

asp.net fileupload控件上传文件与多文件上传_实用技巧

1.前台文件 Default.aspx: <%@ Page Language="C#" AutoEventWireup="true"CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

Asp.net MVC中使用JQuery插件ajaxFileUpload上传文件_实用技巧

0 ajaxFileUpload简介  ajaxFileUpload插件是一个非常简单的基于Jquery的异步上传文件的插件,使用过程中发现很多与这个同名的,基于原始版本基础之上修改过的插件,文件版本比较多,我把我自己使用的ajaxFileUpload文件上传到博客园上了,想要使用的朋友可以下载:http://xiazai.jb51.net/201611/yuanma/ajaxfileupload(jb51.net).rar.  整个插件源码不到200行,实现非常简单,大致原理就是通过js动态创