使用fineuploader调用WebApi上传附件

fineuploader是一个国外的很不错的文件上传JS控件,之前是免费的,现在到官网下载需要收费的。我从网上找了3.3.1的旧版本,对于普通上传文件不会有太大影响。

官网:http://fineuploader.com/ 可以看看API文档。

1.前台HTML代码

<script src="~/Scripts/jquery-1.8.2.js"></script>
<link href="~/Content/js/uploader/fineuploader-3.3.1.css" rel="stylesheet" />
<script src="~/Content/js/uploader/fineuploader-3.3.1.min.js"></script>
<script src="~/Scripts/json2.min.js"></script>
<script type="text/javascript">
    function createUploader() {
        var uploader = new qq.FineUploader({
            element: document.getElementById('fine-uploader'),
            request: {
                endpoint: '/api/Uploader/',
                params: {
                    Name: "johnson",
                    Price: "200"
                }
            },
            text: {
                uploadButton: '选择上传文件' //上传按钮的文字
            },
            multiple: false, //是否为多文件上传
            validation: {
                allowedExtensions: ['txt', 'xlsx', 'doc'], //限制上传格式 
                sizeLimit: 1024 * 1024 * 1024 * 1024 * 1024 //限制上传大小 
            },
            autoUpload: false, //是否自动提交 
            editFilename: { //编辑名字 
                enable: false
            },
            showMessage: function (message) {
                // Using Bootstrap's classes
                //$('#fine-uploader').append('<div class="alert alert-error">' + message + '</div>');
                alert("格式不正确!");
            },
            callbacks: {
                onComplete: function (id, fileName, responseJSON) {
                    debugger;
                    if (responseJSON.success) {
                        alert(responseJSON.error);
                    }
                    else {
                        alert("Failed:" + responseJSON.error);
                    }

                }
            },
            debug: true
        });

        document.getElementById('triggerUpload').onclick = function () {
            uploader.uploadStoredFiles();
        };
    }
    
    window.onload = createUploader;
</script>

<!-- Fine Uploader CSS
====================================================================== -->
<link href="assets/fineuploader.css" rel="stylesheet">

<!-- Fine Uploader DOM Element
====================================================================== -->
<div id="fine-uploader"></div>
<button id="triggerUpload" style="margin-top: 10px;">
        Upload now
    </button>

<!-- Fine Uploader template
====================================================================== -->
<script type="text/template" id="qq-template">
  <div class="qq-uploader-selector qq-uploader">
    <div class="qq-upload-drop-area-selector qq-upload-drop-area" qq-hide-dropzone>
      <span>Drop files here to upload</span>
    </div>
    <div class="qq-upload-button-selector qq-upload-button">
      <div>Upload a file</div>
    </div>
    <span class="qq-drop-processing-selector qq-drop-processing">
      <span>Processing dropped files...</span>
      <span class="qq-drop-processing-spinner-selector qq-drop-processing-spinner"></span>
    </span>
    <ul class="qq-upload-list-selector qq-upload-list">
      <li>
        <div class="qq-progress-bar-container-selector">
          <div class="qq-progress-bar-selector qq-progress-bar"></div>
        </div>
        <span class="qq-upload-spinner-selector qq-upload-spinner"></span>
        <span class="qq-edit-filename-icon-selector qq-edit-filename-icon"></span>
        <span class="qq-upload-file-selector qq-upload-file"></span>
        <input class="qq-edit-filename-selector qq-edit-filename" tabindex="0" type="text">
        <span class="qq-upload-size-selector qq-upload-size"></span>
        <a class="qq-upload-cancel-selector qq-upload-cancel" href="#">Cancel</a>
        <a class="qq-upload-retry-selector qq-upload-retry" href="#">Retry</a>
        <a class="qq-upload-delete-selector qq-upload-delete" href="#">Delete</a>
        <span class="qq-upload-status-text-selector qq-upload-status-text"></span>
      </li>
    </ul>
  </div>
</script>
View Code

2.后台C#代码

namespace UploadTest.Controllers
{
    public class UploaderController : ApiController
    {
        [System.Web.Http.HttpPost]
        public async Task<HttpResponseMessage> PostFormData()
        {
            // Check if the request contains multipart/form-data.
            // 检查该请求是否含有multipart/form-data
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            string root = HttpContext.Current.Server.MapPath("~/App_Data");
            var provider = new MultipartFormDataStreamProvider(root);
            try
            {
                // Read the form data.
                // 读取表单数据
                await Request.Content.ReadAsMultipartAsync(provider);
                //获取传参
                string name = provider.FormData["Name"];
                int price = int.Parse(provider.FormData["Price"]);
                // This illustrates how to get the file names.
                // 以下描述如何获取文件名
                foreach (MultipartFileData file in provider.FileData)
                {
                    Trace.WriteLine(file.Headers.ContentDisposition.FileName);
                    Trace.WriteLine("Server file path: " + file.LocalFileName);
                }
                var resp = new HttpResponseMessage { Content = new StringContent("{\"success\":true,\"error\":\"文件过大!\"}", System.Text.Encoding.UTF8, "text/html") };
                return resp;
            }
            catch (System.Exception e)
            {
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
            }
        }
    }
}
View Code

3.测试结果

 

posted @ 2014-05-14 17:42  TenSpeed  阅读(1957)  评论(4编辑  收藏  举报