VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • C#:使用ajax异步请求实现文件上传与下载功能。---项目框架API+MVC

1.首先使用VS创建WebAPI项目

(这里有个帮助类,将此帮助类复制到项目里,有兴趣可以学着写)

复制代码
//文件上传下载,导入导出辅助类

public class APIFileHelp
{

  //此为限制文件格式
  public string[] ExtentsfileName = new string[] { ".doc", ".xls", ".png", ".jpg" };

  //Upload为自定义的文件夹,在项目中创建
  public string UrlPath = "/Upload/";

  //响应对象 ,使用前先赋值
  public HttpResponse Response = HttpContext.Current.Response;
  public HttpRequest Request = HttpContext.Current.Request;

  //文件下载
  //downFileName下载后保存名,sourceFileName服务器端物理路径
  public void DownLoad(string downFileName, string sourceFileName)
  {
    if (File.Exists(sourceFileName))
    {
      Response.Clear();
      Response.ClearHeaders();
      Response.ClearContent();
      Response.Buffer = true;
      Response.AddHeader("content-disposition", string.Format("attachment; FileName={0}", downFileName));
      Response.Charset = "GB2312";
      Response.ContentEncoding = Encoding.GetEncoding("GB2312");
      Response.ContentType = MimeMapping.GetMimeMapping(downFileName);
      Response.WriteFile(sourceFileName);
      Response.Flush();
      Response.Close();
    }    
  }

//文件上传操作
public FileResult UpLoad()
{
//保存文件名
string name = "";
if (Request.Files.Count > 0)
{
string FileUrlResult = "";
foreach (string fn in Request.Files)
{
var file = Request.Files[fn];
name = file.FileName.ToString();
var extenfilename = Path.GetExtension(file.FileName);
//判断 路径是否存在
string path = HttpContext.Current.Server.MapPath(UrlPath);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}

if (ExtentsfileName.Contains(extenfilename.ToLower()))
{
string urlfile = UrlPath + DateTime.Now.ToFileTime() + extenfilename;
string filepath = HttpContext.Current.Server.MapPath(urlfile);
file.SaveAs(filepath);
FileUrlResult += urlfile + ";";
}

//格式不正确
else
{
  //实例化结果类
return new FileResult() { Code = -1, Msg = "只允许上传指定格式文件" + string.Join(",", ExtentsfileName), Url = "" };
}
}

//上传成功
return new FileResult() { Code = 0, Name = name, Msg = "上传成功", Url = FileUrlResult };
}

//上传失败
else
{
return new FileResult() { Code = -1, Msg = "不能上传空文件", Url = "" };
}
}

}

//结果类
public class FileResult
{
public int Code { get; set; }  //结果
public string Msg { get; set; }  //提示信息
public string Url { get; set; }   //地址
public string Name { get; set; }  //文件名
}
复制代码
复制代码
//控制器端
public class FileOperationController : ApiController
{    
     //实例化帮助类
     APIFileHelp help = new APIFileHelp();
    [HttpGet]
    public void DownLoad(string Url)
    {
            string filePath = HttpContext.Current.Server.MapPath(Url);
        FileInfo fi = new FileInfo(filePath);
        help.DownLoad(fi.Name, fi.FullName);
    }

        //文件上传
     [HttpPost]
     public FileResult UpLoad()
     {
          return help.UpLoad();
     }
}        
复制代码
复制代码
//文件上传、下载: MVC端
//文件下载
//API地址+参数+自己定义的文件名+文件Url
<a href = "https://localhost:44370/api/FileOperation/DownLoad?Url=/FileUpload/132211303318715030.xls" > 下载 </ a >
<input type = "file" id="f1" />
<input type = "button" value="aa" onclick="ff()"/>

<script>
    function ff()
  {
    var formData = new FormData();
    var file = document.getElementById("f1").files[0];
    formData.append("fileInfo", file);
        $.ajax({
         url: "https://localhost:44370/api/FileOperation/UpLoad",
            type: "POST",
            data: formData,
            contentType: false,//必须false才会自动加上正确的Content-Type
            processData: false,//必须false才会避开jQuery对 formdata 的默认处理,XMLHttpRequest会对 formdata 进行正确的处理
            success: function(data) {
            if (data.Code == 0)
                alert(data.Msg)
                else
                alert(data.Url)
            },
            error: function(data) {
            alert("上传失败!");
        }
    });
}
</script>
复制代码


相关教程