使用jquery ajax调用从客户端上传文件永远不会选择文件

时间:2017-04-10 17:28:08

标签: c# jquery asp.net ajax

我已经阅读了一些相关的帖子但是到目前为止任何人都可以帮助我,我现在尝试上传在客户端输入文件中选择的文件,然后使用jquery ajax调用调用服务器方法,请我是怎么做的:

Sever Side Method:

       [WebMethod]public static void UploadDetailImageFromClient(string filename, string caption, string itemid, string inspid) {
        HttpPostedFile file = HttpContext.Current.Request.Files["ContentPlaceHolder1_uploadBtn"]; if (file != null && file.ContentLength > 0) //See the id here include ContentPlaceHolder as I'm using a MasterPage, here is where I'm never getting the file, it comes NULL
        {
            string fname = Path.GetFileName(file.FileName);
            if (!System.IO.File.Exists(Path.Combine("images/", fname))) {
                file.SaveAs(HttpContext.Current.Server.MapPath(Path.Combine("images/", fname)));
            }                
        }

    }

客户端:

<td><asp:FileUpload ID="uploadBtn" runat="server" accept=".png,.jpg,.jpeg,.gif"/></td>

这是我调用以调用服务器方法的函数:

    function uploadnewpicture() {
    jQuery.ajax({
        type: "POST",
        url: "FormInspectionsMidPoint.aspx/UploadDetailImageFromClient",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ filename: filename, caption: caption, itemid: itemid, inspid: inspid }),
        dataType: "json",
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
        },
        success: function (data) {
            jQuery("#ContentPlaceHolder1_uploadBtn").val("");
            jQuery("#ContentPlaceHolder1_txtImageDetailCaption").val("");
            alert("Picture uploaded successfully");
        }
    });
}

请注意,我在点击事件的输入按钮上调用此javascript函数,该事件位于jQuery对话框中。这就是我使用ajax调用来保持对话框以及从客户端读取输入文件中的值的原因。我也在使用enctype =&#34; multipart / form-data&#34;在表格中。

我希望有人有同样的情况,可以帮助我。感谢。

1 个答案:

答案 0 :(得分:0)

我在项目中遇到了同样的情况。您可以在客户端创建表单数据对象,并将该文件对象添加到该表单数据对象并传递给控制器​​。并从服务器端请求接收所选文件。

客户方: - var data = new FormData(); data.append(“file”,file);

服务器端: - HttpPostedFileBase文件= Request.Files [“file”]