WebApi实现单个文件的上传下载
上传和下载是很常用的功能了,只有当用到的时候才发现不会写...,经过一番百度、筛选、整理修改后,实现了功能,下面简单的记录下实现方法。
一、上传功能
1.前端代码
- 上传文件 <input type="file" id="file" />
- <input type="button" id="upload" value="上传文件" />
- <script>
- //上传
- $("#upload").click(function () {
- var formData = new FormData();
- var file = document.getElementById("file").files[0];
- formData.append("fileInfo", file);
- $.ajax({
- url: "../api/File/UploadFile",
- type: "POST",
- data: formData,
- contentType: false,//必须false才会自动加上正确的Content-Type
- processData: false,//必须false才会避开jQuery对 formdata 的默认处理,XMLHttpRequest会对 formdata 进行正确的处理
- success: function (data) {
- alert(data);
- },
- error: function (data) {
- alert("上传失败!");
- }
- });
- });
- </script>
2.后台代码
- /// <summary>
- /// 上传文件
- /// </summary>
- [HttpPost]
- public string UploadFile()
- {
- string result = string.Empty;
- try
- {
- string uploadPath = HttpContext.Current.Server.MapPath("~/App_Data/");
- HttpRequest request = System.Web.HttpContext.Current.Request;
- HttpFileCollection fileCollection = request.Files;
- // 判断是否有文件
- if (fileCollection.Count > )
- {
- // 获取文件
- HttpPostedFile httpPostedFile = fileCollection[];
- string fileExtension = Path.GetExtension(httpPostedFile.FileName);// 文件扩展名
- string fileName = Guid.NewGuid().ToString() + fileExtension;// 名称
- string filePath = uploadPath + httpPostedFile.FileName;// 上传路径
- // 如果目录不存在则要先创建
- if (!Directory.Exists(uploadPath))
- {
- Directory.CreateDirectory(uploadPath);
- }
- // 保存新的文件
- while (File.Exists(filePath))
- {
- fileName = Guid.NewGuid().ToString() + fileExtension;
- filePath = uploadPath + fileName;
- }
- httpPostedFile.SaveAs(filePath);
- result = "上传成功";
- }
- }
- catch (Exception)
- {
- result = "上传失败";
- }
- return result;
- }
二、下载功能
1.前端代码
- <form action="../api/File/DownloadFile" method="get" id="form">
- 下载文件 <input type="text" id="name" name="fileName" value="222" />
- </form>
- <input type="button" id="download" value="下载文件" />
- <script>
- //下载
- $("#download").click(function () {
- var form = $("#form");
- form.submit();
- });
- </script>
2.后台代码
- /// <summary>
- /// 下载文件
- /// </summary>
- [HttpGet]
- public void DownloadFile()
- {
- var request = HttpContext.Current.Request;
- NameValueCollection nvCollection = request.Params;
- string fileName = nvCollection.GetValues("fileName")[];
- string filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data/"), fileName);
- if (File.Exists(filePath))
- {
- HttpResponse response = HttpContext.Current.Response;
- response.Clear();
- response.ClearHeaders();
- response.ClearContent();
- response.Buffer = true;
- response.AddHeader("content-disposition", string.Format("attachment; FileName={0}", fileName));
- response.Charset = "GB2312";
- response.ContentEncoding = Encoding.GetEncoding("GB2312");
- response.ContentType = MimeMapping.GetMimeMapping(fileName);
- response.WriteFile(filePath);
- response.Flush();
- response.Close();
- }
- }
三、遇到的问题
1.写了个测试的html页,如何让程序运行时打开这个页面,在默认执行的HomeControler中添加重定向代码
- HttpContext.Response.Redirect("Html/Index.html", true);
2.跨域问题
当问题1中html页和后端程序分开部署时,就会产生跨域问题
可在web.config中进行如下配置
- <system.webServer>
- <httpProtocol>
- <customHeaders>
- <add name="Access-Control-Allow-Origin" value="*"/>
- <add name="Access-Control-Allow-Headers" value="X-Requested-With,Content-Type,Accept,Origin"/>
- <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS"/>
- </customHeaders>
- </httpProtocol>
- </system.webServer>
详情可阅读:https://www.cnblogs.com/landeanfen/p/5177176.html
Demo下载:https://pan.baidu.com/s/1zV1-4WvrP3ZTWwTDFAmExQ
WebApi实现单个文件的上传下载的更多相关文章
- php文件夹上传下载控件分享
用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件 这里我先 ...
- 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载
文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服务器计算机上. 然后,远程计算机可以使用 FTP ...
- 创建FTP的Site并用C#进行文件的上传下载
创建FTP的Site并用C#进行文件的上传下载 文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服 ...
- linux链接及文件互相上传下载
若排版紊乱可查看我的个人博客原文地址 基本操作 本篇博客主要介绍如何去链接远程的linux主机及如何实现本地与远程主机之间文件的上传下载操作,下面的linux系统是CentOS6.6 链接远程linu ...
- Spring实现文件的上传下载
背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...
- SocketIo+SpringMvc实现文件的上传下载
SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...
- JAVAWEB之文件的上传下载
文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...
- SSM框架之中如何进行文件的上传下载
SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...
- python使用ftplib模块实现FTP文件的上传下载
python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def uplo ...
随机推荐
- SQL Server 2008 表分区的含义
https://www.cnblogs.com/knowledgesea/p/3696912.html 继续看这个文档 http://www.360doc.com/content/16/0104/11 ...
- Python进程池举例
multiprocessing包 from multiprocessing import Pool def a(num): print num if __name__ == "__main_ ...
- Django:查询后,分页功能为全部对象分页,丢失查询查询参数
问题: 原始的链接为 http://127.0.0.1:8000/article/list-article-titles-bysomeone/guchen/?column=django 有一个colu ...
- websevice动态控制访问ip
一般而言webservice是部署在哪台服务器,然后它的address location就是指向哪个,但是由于有些情况处于各种原因,如网络策略,需要先访问某个ip之后再进行跳转到一个ip,这个时候就需 ...
- SignalR 2 入门
在本教程中使用的软件版本 Visual Studio 2015 .NET 4.5 SignalR 版本 2 概述 本教程介绍了通过演示如何生成简单的基于浏览器的聊天应用程序的 SignalR 开发. ...
- MVVM Light 新手入门(1):准备阶段
1.新建WPF空白项目. 2.NuGet 程序包中安装 3.根据MVVM分层结构,建立包含Model.View.ViewModel三层文件夹 如图: 1.View负责前端展示,与ViewModel进行 ...
- Lily-一个埋点管理工具
本文来自网易云社区 前言 在很多项目中,埋点数据使用表格来统计的,随着项目的进行,数据量越来越复杂,越来越难以维护.所以很多公司都已经开发了一整套系统,从埋点的录入到代码的输出. 我们项目中iOS和A ...
- Android sharedUserId 和系统权限
sharedUserId 给不同的应用使用同一个 sharedUserId 可以运行在这几个应用间互相访问数据(数据库,SharedPreferences,文件). sharedUserId 一旦使用 ...
- Web 前端 注意知识点
一. 前端使用技巧: 1. button的用法.在使用按钮时可以自由在内设置style属性,来改变形态.可以给予type=sbumit提交属性. 2. 各种使用符号: # <!--小于 大于 ...
- flask中邮件发送方法
from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) #配置邮件:服务器/端口/传输层安 ...