我无法在操作方法中将我的文件传递给 httppostedfilebase

Posted

技术标签:

【中文标题】我无法在操作方法中将我的文件传递给 httppostedfilebase【英文标题】:I can't pass my file to httppostedfilebase in action method 【发布时间】:2015-05-18 03:31:38 【问题描述】:

我正在使用jquery form plugin 将图像传递给我的操作方法。我似乎无法将控制器上 action 方法中的 httppostedfilebase 设置为正确的数据类型。

$('#imageform').submit(function () 
    var id = $('#selectedFile').data('id');
    //var filename = $('#selectedFile').val(); //.files[0];
    //var filename = document.getElementById('selectedFile').files[0];
    //var filename = input.files[0];
    var filename = $('#selectedFile').prop('files');
    var options = 
        target: '#output',
        enctype: 'multipart/form-data',
        beforeSubmit: showRequest,
        success: showResponse,

        url: '/ManageSpaces/UploadImage',
        data: 
            id: id,
            image: filename[0]
        ,
        type: 'post'

    ;
    $('#imageform').ajaxSubmit(options);
    return false;
);

这是我的控制器的操作方法。

[HttpPost]
    public ActionResult UploadImage(int id, HttpPostedFileBase image)
    
        //do some stuff here

        return Json("Saved");
    

html表单数据

 <form id="imageform" enctype="multipart/form-data">
            <input type="file" id="selectedFile" name="selectedFile" style="display: none;" data-id='@Model.YogaSpaceId' />
            <input type="button" value="Add Photos" class="btn" id="pictureupload" />
        </form>

【问题讨论】:

请发布您的 HTML 尝试将 enctype="multipart/form-data" 添加到 html 中的表单中,也许会有所帮助 您根本不需要使用 Jquery 表单插件。我知道这不是您的问题/问题的直接答案。但我想建议您使用“简短而简单”的方法来上传/下载文件。试试下面的文章链接。这将解释文件上传和下载。 How-to-upload-and-download-files-asynchronously-using-asp-net-mvc-4-5。它也有示例项目。 【参考方案1】:
$('#imageform').submit(function () 
    var formData = new FormData();
    var totalFiles = document.getElementById("selectedFile").files.length;
    for (var i = 0; i < totalFiles; i++) 
        var file = document.getElementById("selectedFile").files[i];
        formData.append("FileUpload", file);
    

    $.ajax(
        type: "POST",
        url: '/Test/UploadImage/', //put your controller/action here
        data: formData,
        dataType: 'json',
        contentType: false,
        processData: false,
        beforeSend: function (xhr) 
             //do something before send
        ,
        success: function (data) 
             //do something if success
        ,
        error: function (data) 
             //do something if error
        
    );
);

然后在你的控制器中:

[HttpPost]
public void UploadImage()

    if (Request.Files.Count > 0) 
        dynamic file = Request.Files(0);
        //do something with your 'file'
    

【讨论】:

request.files(0) 给出一个错误,提示方法或委托是预期的

以上是关于我无法在操作方法中将我的文件传递给 httppostedfilebase的主要内容,如果未能解决你的问题,请参考以下文章

如何在批处理文件中将输入传递给.exe?

如何在flutter中将数据从firestore传递给Typeahead

在反应组件中将样式作为道具传递

样式化的 MUI 无法在 typescript 中将组件道具传递给 Typography

如何在 JAVA 中将 JSON 和文件传递给 REST API?

如何在反应中将子组件的状态数组传递给父组件?