使用ajax和c#web方法代码调用uploadfile控件

问题描述 投票:0回答:1

如何使用上传文件控件C#进行Ajax调用以及另外一个参数请看下面的代码并帮助我这个,我想保存一个带有多个参数的图像用于更新图像。请帮我实现这个目标。

我想用多个参数更新图像

$scope.myData.updateimage = function(item, event) {

    var data = new FormData();

    var files = $("#FileUpload1").get(0).files;

    // Add the uploaded image content to the form data collection
    if (files.length > 0) {
        data.append("UploadedImage", files[0]);
    }

    $.ajax({
        type: "POST",
        url: "contentlist.aspx/updateid",
        data: JSON.stringify({
            FileUpload: data,
            currentid: $scope.currentid
        }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {

        }
    });
}

C#代码

[WebMethod]
public static string updateid(FileUpload FileUpload1, string currentid)
{

    HttpContext context = HttpContext.Current;
    string baseUrl = context.Request.Url.Authority + context.Request.ApplicationPath.TrimEnd('/');

    if (FileUpload1.HasFile)
    {
        try
        {
            if (FileUpload1.PostedFile.ContentLength < 3267633)
            {
                string strname = FileUpload1.FileName.ToString();
                string url = "http://" + baseUrl + "/Images/" + strname;
                FileUpload1.PostedFile.SaveAs(url);
                int id = Convert.ToInt16(appVars.updatedid);
                string Query = "UPDATE SubCategories SET imageurl = WHERE id = " + id;
                string result = dbAccess.ExecuteOnlyQuery(Query);
            }
            else
            {


            }
        }
        catch (Exception ex)
        {

        }
    }

    return "";
}
c# asp.net ajax asp.net-web-api
1个回答
1
投票

您可能无法执行该AJAX调用,提交文件,因为输入文件控制受到限制:出于安全原因,浏览器不允许客户端脚本从用户的硬盘驱动器中选择文件。

因此,您必须使用已存在的机制:所述输入文件元素必须位于表单元素中,您将使用按钮元素或input-submit元素提交,或者在执行时执行form.submit()你想要的(例如在输入文件的onchange事件中,或在某个自定义按钮或类似的onclick中)。

再次,我怀疑你是否能够找到一种从JS获取文件内容的方法。可以使用Flash组件进行更多控制,但这是一个额外的复杂性和依赖性。您可以轻松地将输入文件控件设置为不同的样式(甚至不显示其按钮),而不是服务器端,您必须为HttpPost调整该方法,不接受args(然后你必须通过Request.Files找到它们。

currentid值也许可以通过输入隐藏在客户端上来包含,并且需要像输入文件一样进行命名,以便它成为表单提交包的一部分。

我希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.