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.后台代码

 1         /// <summary>
 2         /// 上传文件
 3         /// </summary>
 4         [HttpPost]
 5         public string UploadFile()
 6         {
 7             string result = string.Empty;
 8             try
 9             {
10                 string uploadPath = HttpContext.Current.Server.MapPath("~/App_Data/");
11                 HttpRequest request = System.Web.HttpContext.Current.Request;
12                 HttpFileCollection fileCollection = request.Files;
13                 // 判断是否有文件
14                 if (fileCollection.Count > 0)
15                 {
16                     // 获取文件
17                     HttpPostedFile httpPostedFile = fileCollection[0];
18                     string fileExtension = Path.GetExtension(httpPostedFile.FileName);// 文件扩展名
19                     string fileName = Guid.NewGuid().ToString() + fileExtension;// 名称
20                     string filePath = uploadPath + httpPostedFile.FileName;// 上传路径
21                     // 如果目录不存在则要先创建
22                     if (!Directory.Exists(uploadPath))
23                     {
24                         Directory.CreateDirectory(uploadPath);
25                     }
26                     // 保存新的文件
27                     while (File.Exists(filePath))
28                     {
29                         fileName = Guid.NewGuid().ToString() + fileExtension;
30                         filePath = uploadPath + fileName;
31                     }
32                     httpPostedFile.SaveAs(filePath);
33                     result = "上传成功";
34                 }
35             }
36             catch (Exception)
37             {
38                 result = "上传失败";
39             }
40             return result;
41         }

二、下载功能

1.前端代码

 1 <form action="../api/File/DownloadFile" method="get" id="form">
 2    下载文件 <input type="text" id="name" name="fileName" value="222" />
 3 </form>
 4 <input type="button" id="download" value="下载文件" />
 5
 6 <script>
 7     //下载
 8     $("#download").click(function () {
 9         var form = $("#form");
10         form.submit();
11     });
12 </script>

2.后台代码

 1         /// <summary>
 2         /// 下载文件
 3         /// </summary>
 4         /// <param name="fileName"></param>
 5         [HttpGet]
 6         public void DownloadFile(string fileName)
 7         {
 8             string filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data/"), fileName);
 9             if (File.Exists(filePath))
10             {
11                 HttpResponse response = HttpContext.Current.Response;
12                 response.Clear();
13                 response.ClearHeaders();
14                 response.ClearContent();
15                 response.Buffer = true;
16                 response.AddHeader("content-disposition", string.Format("attachment; FileName={0}", fileName));
17                 response.Charset = "GB2312";
18                 response.ContentEncoding = Encoding.GetEncoding("GB2312");
19                 response.ContentType = MimeMapping.GetMimeMapping(fileName);
20                 response.WriteFile(filePath);
21                 response.Flush();
22                 response.Close();
23             }
24         }

三、遇到的问题

1.写了个测试的html页,如何让程序运行时打开这个页面,在默认执行的HomeControler中添加重定向代码

HttpContext.Response.Redirect("Html/Index.html", true);

2.跨域问题

当问题1中html页和后端程序分开部署时,就会产生跨域问题

可在web.config中进行如下配置

1   <system.webServer>
2     <httpProtocol>
3       <customHeaders>
4         <add name="Access-Control-Allow-Origin" value="*"/>
5         <add name="Access-Control-Allow-Headers" value="X-Requested-With,Content-Type,Accept,Origin"/>
6         <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS"/>
7       </customHeaders>
8     </httpProtocol>
9   </system.webServer>

详情可阅读:https://www.cnblogs.com/landeanfen/p/5177176.html

Demo下载:https://pan.baidu.com/s/1zV1-4WvrP3ZTWwTDFAmExQ

原文地址:https://www.cnblogs.com/LikeHeart/p/9581878.html

时间: 2025-01-06 10:25:00

WebApi实现单个文件的上传下载的相关文章

文件的上传下载

文件的上传下载包括文件的上传和文件的下载两部分,下面以项目的形式给出,项目的结构如下图所示: 项目的思路如下: 1.启动项目,输入地址:http://localhost:8080/fileUpload/upload/upload.jsp,进入文件上传界面upload.jsp. 2.文件上传的路径是UploadHandleServlet,创建临时保存文件路径(在项目的根目录的web-inf下面):                                   D:\ruanjian\tomc

HttpClient实现文件的上传下载

1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活.HttpClient 用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. 一般的情况下我们都是使用Chrome或者

通过scp实现文件的上传下载

一.什么是scp? Scp 是SSH自带的一个内置命令,是安全拷贝的意思,可以实现文件的上传和下载,传输速率快,    安全性高. 二.通过scp实现文件的上传下载 1.  从服务器下载文件到本地 (1)不指定身份下载 例:下载服务器172.25.254.116的/home/student/test/QQ/12.txt到本地/home/kiosk/ 不指定身份下载默认以当前登陆用户下载,如果当前登陆用户对下载文件没有读写权限将不能下载 (2)指定身份下载 例:以root身份下载服务器172.25

asp.Net文件的上传下载(2) 转

Asp.net 上传.下载文件 2011-01-08 16:21:48|  分类: .NET |  标签: |举报 |字号大中小 订阅 首先我们要判断用户是否选择了要上传文件,我们可用下面这句实现: if(File1.PostedFile.ContentLength>0)  如果用户有上传的文件,则:   string name = File1.PostedFile.FileName ;//获取输入的文件名字      int i= name.LastIndexOf(".") ;

asp.net文件的上传下载

Web.Config 配置文件 <?xml version="1.0"?> <configuration> <appSettings>    <add key="FileUploadPath" value="Upload/" />    <add key="FileTypeLimit" value=".zip,.rar,.dox,.ppt,.txt,.mp3&qu

JAVAWEB之文件的上传下载

文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将他们表达出来.下面是具体的步骤,大家可以跟着我一步一步的用apache的fileupload插件来完成文件的上传下载. 1.创建一个web工程,我们这里取名为fileupload 2.导入相关jar包,,数据源使用的是apache-c3p0数据源,以及上传下载插件包,goson库,以及mysql驱动

Asp.net实现MVC处理文件的上传下载功能实例教程

这篇文章主要介绍了Asp.net实现MVC处理文件的上传下载功能,比较全面而系统的对Asp.net MVC的文件上传下载功能进行了深入分析,有很好的借鉴价值,需要的朋友可以参考下 上传于下载功能是程序设计中非常常见的一个功能,在ASP.NET程序开发中有着非常广泛的应用.本文就以实例形式来实现这一功能. 一.概述 如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUploa

python使用ftplib模块实现FTP文件的上传下载

python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def upload(f, remote_path, local_path): fp = open(local_path, "rb") buf_size = 1024 f.storbinary("STOR {}".format(remote_path), fp, buf_size) f

[原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------