【问题标题】:JQuery ajax file upload to ASP.NET with all form data带有所有表单数据的 JQuery ajax 文件上传到 ASP.NET
【发布时间】:2015-03-17 10:13:57
【问题描述】:

我正在建立一个网站,该网站有一个职业页面,其中包含用于上传简历的输入文件 HTML 控件。 在使用 JQuery 将表单值发布到 ASPX 页面时,除了文件上传之外,一切正常。 如何使用 JQuery 在一个 AJAX 请求中发布每个字段(包括文件)? 我在 Google 中看到的示例仅处理文件上传,而不处理其他字段。 这是我的 JQuery,未进行文件上传的 ASPX。

  <script type="text/javascript">

   $(document).ready(function(e) {

       // File variable
       var files;

       // Add events
       $('#resume').on('change', prepareUpload);

       // Grab the files and set them to our variable
       function prepareUpload(event)
       {
         files = event.target.files;
       }



   $( "#submit_btn" ).click(function( ) {

       var fileData = new FormData();
       $.each(files, function(key, value)
       {
           fileData.append(key, value);
       });



       var formMessage = tinyMCE.get('message').getContent();
       var formName = $('.contact-container #name').val();
       var formPhone = $('.contact-container #phone').val();
       var formEmail = $('.contact-container #email').val();
       var formApplyFor = $('.contact-container #applyfor').val();

    // Get some values from elements on the page:
   var a=  $.ajax({
           method: "POST",
           url: "mail/test.aspx",
           processData: false,
           contentType: false,
           data: {
                   form: 'career',
                   name: formName ,
                   phone: formPhone,
                   email: formEmail,
                   applyfor: formApplyFor,
                   resume: fileData,
                   coverletter: window.btoa(unescape(encodeURIComponent( formMessage)))
                   },

                   success: function (data) {
                   alert('success');

               },
               error: function (data) {
                   alert('err');

               }
       })
       .done(function( msg ) {
           alert('done');
       }); //ajax end
   alert(a);

   }); //submit button end

   }); //document ready end
 </script>

【问题讨论】:

    标签: javascript jquery asp.net ajax


    【解决方案1】:

    这可能是因为你不应该将它单独对待,而是作为一个表单对象(formData)

    在这里您可以找到一个包含“原始”字段和文件字段的表单示例

    https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData

    我做了一个快速测试来证明它可以使用 ASP.NET MVC:

    HTML 和 Javascript:

    <form id="form" name="form1" method="post" enctype="multipart/form-data">
        <div>
            <label for="caption">Image Caption</label>
            <input name="caption" type="text" />
        </div>
        <div>
            <label for="caption2">Image Caption2</label>
            <input name="caption2" type="text" />
        </div>
        <div>
            <label for="image1">Image File</label>
            <input name="image1" type="file" />
        </div>
    </form>
    
    <button onclick="submit()">test</button>
    
    function submit() {
        var form = document.querySelector('form');
    
        var data = new FormData(form);
    
        $.ajax({
            type: "POST",
            url: "Home/Upload",
            data: data,
            processData: false,
            contentType: false
        });
    }
    

    ASP.NET MVC:

        public ActionResult Upload()
        {
            foreach (string file in Request.Files)
            {
                var fileContent = Request.Files[file];
                if (fileContent != null && fileContent.ContentLength > 0)
                {
                    var stream = fileContent.InputStream;
                    var fileName = fileContent.FileName;
                    //you can do anything you want here
                }
            }
    
            foreach (string key in Request.Form)
            {
                var value = Request.Form[key];
            }
    
            return Content("OK");
        }
    

    当然可以通过绑定模型等做得更好...

    如果您的原始字段不在表单中,我会使用 append 将它们添加到 formData 对象,然后尝试单独发送此对象。希望这会有所帮助

    【讨论】:

    • 它可以在移动设备上使用吗?就我而言,它在桌面上运行良好,但在移动浏览器中却不行。在android chrome中,它说POST (destination url) net::ERR_ACCESS_DENIED
    猜你喜欢
    • 2017-06-08
    • 2014-08-02
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多