在提交按钮 C# MVC 上获取上传的文件

Posted

技术标签:

【中文标题】在提交按钮 C# MVC 上获取上传的文件【英文标题】:Get uploaded file on submit button C# MVC 【发布时间】:2020-10-28 10:44:01 【问题描述】:

我可以在输入文件更改时上传文件 不使用 html 助手类。但我需要在提交按钮上读取并获取上传的文本文件的数据。

下面是我在 html 中使用的代码:

<div>
   <input id="uploadtxtfile" type="file" multiple />
   <button type="submit" class="btn-sm" id="btnuploadfile"/>                         
</div>

和我正在调用的 jquery 代码:

$('#uploadtxtfile').change(function (e) 
    var i = 0;
    var files = $("#uploadtxtfile").get(0).files;
    fileData = new FormData();      
    for (i; i < files.length; i++) 
        var fileName = e.target.files[0].name;
        fileData.append(fileName, files[i]);
        $("#txtUpload").val(fileName);         
           
    $.ajax(
        type: "POST",
        url: "/ViewProcessEDI/UploadTextFile",
        async: true,
        dataType: "json",
        contentType: false,
        processData: false,
        data: fileData,
        success: function (res) 
            if (res.Message == "Success") 
                divListProcessEDI($("#currentPage").val());
                popup.close();
                setTimeout(function () 
                    Message('Success!', 'TextFile Upload Successfully!', 's');
                , 100);
            
            else 
                Message('Error!', res.Message, 'e');
            
        
    );
);

和控制器功能是:

如何在提交按钮上获取上传的文件。谁能指导我。

[HttpPost]
    public async Task<JsonResult> UploadTextFile()
    
        string ErrorMessage = string.Empty;
        Dictionary<string, string> returnVal = new Dictionary<string, string>();
        try
        
            CredentialsMaster objCredentialsMaster = new CredentialsMaster();
            if (CheckSession.CheckStoreOwnerSession(ref objCredentialsMaster))
            
                if (Request.Files.Count > 0)
                
                    HttpFileCollectionBase files = Request.Files;
                    for (int i = 0; i < files.Count; i++)
                    
                        HttpPostedFileBase file = files[i];
                        string fname;
                        // Checking for Internet Explorer  
                        if (Request.Browser.Browser.ToUpper() == "IE" || Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER")
                        
                            string[] testfiles = file.FileName.Split(new char[]  '\\' );
                            fname = testfiles[testfiles.Length - 1];
                        
                        else
                        
                            fname = file.FileName;
                        
                        if (file != null && file.ContentLength > 0)
                        
                            // Get the complete folder path and store the file inside it.  
                            file.SaveAs(Path.Combine(@"E:\EDITextFiles", fname));                               
                        
                    
                
            
            else
            
                ErrorMessage = "Session Expired";
            
        
        catch (Exception ex)
        
            ErrorMessage = ex.Message;
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json("Upload failed");
                   
        return Json("File Uploaded Successfully");
    

谢谢。

【问题讨论】:

您是否尝试在互联网上寻找答案?你可以从this link开始 是的,我浏览了链接,但我需要在不使用 MVC 中的 HTML 帮助器类的情况下这样做 所以请描述您的设置和限制并添加代码 sn-p 以便我们更好地了解您的上下文 【参考方案1】:

我得到了我需要从以下帖子中得到的答案: passing file to controller without using form,

我需要在 javascript 中将发布的文件名作为 jQuery("#file").get(0).files[0] 传递,以便我可以在控制器函数中获取发布的文件名。

【讨论】:

【参考方案2】:

您的问题的本质是如何在没有 @HTML 帮助器的情况下执行此操作。通过使用表单元素并调用操作,您始终可以在没有这些助手的情况下做事。 @HTML 助手只是协助创建 HTML5 元素。如果您需要,表单元素将允许在无需使用 Ajax 的情况下调用控制器。

html form posting to mvc controller

【讨论】:

以上是关于在提交按钮 C# MVC 上获取上传的文件的主要内容,如果未能解决你的问题,请参考以下文章

用C#在winform窗口下点击按钮选择要提交的文件然后上传到数据库或其他地方,还可以让其他人下载和查看

提交按钮未在 ASP.NET MVC Web 应用程序中触发

jQuery 文件上传:是不是可以使用提交按钮触发上传?

jQuery 文件上传:是不是可以使用提交按钮触发上传?

mvc多个按钮的提交方法

上传时的 Dropzone 提交按钮