jQuery + Ajax + WebAPI 上传文件

HTML5 中已经可以用 Ajax 上传文件了,而且代码非常简单,借助 FormData 类即可发送文件数据。


前端代码:

<p><input type="file" id="upfile"></p>
<p><input type="button" id="upJS" value="用原生JS上传"></p>
<p><input type="button" id="upJQuery" value="用jQuery上传"></p>

<script>
    // 原生JS版
    document.getElementById("upJS").onclick = function () {
        /* FormData 是表单数据类 */
        var fd = new FormData();
        var ajax = new XMLHttpRequest();
        fd.append("upload", 1);
        /* 把文件添加到表单里 */
        fd.append("upfile", document.getElementById("upfile").files[0]);
        ajax.open("post", "/api/Upload", true);

        ajax.onload = function () {
            console.log(ajax.responseText);
        };

        ajax.send(fd);
    }

    // jQuery版
    $('#upJQuery').on('click', function () {
        var fd = new FormData();
        fd.append("upload", 1);
        fd.append("upfile", $("#upfile").get(0).files[0]);
        $.ajax({
            url: "/api/Upload",
            type: "POST",
            processData: false,
            contentType: false,
            data: fd,
            success: function (d) {
                console.log(d);
            }
        });
    });
</script>

后台代码:

using System;
using System.IO;
using System.Web;
using System.Web.Http;

namespace ASP.NET_MVC_study.WepApi
{
    public class UploadController : ApiController
    {
        private string uploadPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Upload/";

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <returns>成功返回图片URL,失败则返回错误信息</returns>
        public string Post()
        {
            string result = string.Empty;
            string imgPath = string.Empty;

            HttpRequest request = System.Web.HttpContext.Current.Request;
            HttpFileCollection fileCollection = request.Files;

            // 判断是否有文件
            if (fileCollection.Count > 0)
            {
                // 获取图片文件
                HttpPostedFile httpPostedFile = fileCollection[0];
                // 文件扩展名
                string fileExtension = Path.GetExtension(httpPostedFile.FileName);
                // 图片名称
                string fileName = Guid.NewGuid().ToString() + fileExtension;
                // 图片上传路径
                string filePath = uploadPath + fileName;

                // 验证图片格式
                if (fileExtension.Contains(".jpg")
                    || fileExtension.Contains(".png")
                    || fileExtension.Contains(".bmp"))
                {
                    // 如果目录不存在则要先创建
                    if (!Directory.Exists(uploadPath))
                    {
                        Directory.CreateDirectory(uploadPath);
                    }

                    // 保存新的图片文件
                    while (File.Exists(filePath))
                    {
                        fileName = Guid.NewGuid().ToString() + fileExtension;
                        filePath = uploadPath + fileName;
                    }
                    httpPostedFile.SaveAs(filePath);

                    // 把文件的存储路径保存起来
                    SaveUploadFileInfo(fileName, filePath);

                    // 返回图片URL
                    imgPath = Setting.ServerIP + Setting.PhotoPath + fileName;
                    result = imgPath;
                }
                else
                {
                    result = "请选择jpg/png/bmp格式的图片";
                }
            }
            else
            {
                result = "请先选择图片!";
            }

            return result;
        }
    }
}

参考文章:HTML5中用 jQuery + Ajax 上传文件

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值