如何通过javascript中的ajax调用传递blob值?

Posted

技术标签:

【中文标题】如何通过javascript中的ajax调用传递blob值?【英文标题】:How to pass blob value through ajax call in javascript? 【发布时间】:2021-12-15 01:33:49 【问题描述】:

我们正在生成 blob 值,并希望通过 SQL Server 将其插入数据库。 我们能够传递 blob 值,并且通过 Ajax 调用的帮助,我们试图将其插入,但我们收到错误 Uncaught (in promise) TypeError: Failed to execute 'array buffer on 'Blob': Illegal invocation code。在 WebServices 中,我们将其作为字节值 byte[] BLOB 传递,而在 SQL 中,我们使用 var binary(max) 来存储值。

async function pdfhandler() 
    let pdfBlob = '1';
    var mystring = "Hello World!";
    pdfBlob = new Blob([mystring]);
    updateblobdata(pdfBlob);
    console.log(pdfBlob);


  
function updateblobdata(blobvalue) 
    debugger;
    /// Insert Blob into Database ///
    console.log('updateblobdata called');
    const urlParams = new URLSearchParams(window.location.search);
    const myParamtag = urlParams.get('104');
    const mymodelval = urlParams.get('DuganHosp-0002');

    var wonumval = '104'; var tagnumval = 'DuganHosp-0002';
    var Modeval = 'U';
    var BLOBval = blobvalue;

    $.ajax(

        url: 'TestTool_WebService.asmx/UpdatehtmlBLOBContent',
        data: 
            WoNum: wonumval,
            Tagnum: tagnumval,
            BLOB: BLOBval,
            Mode: Modeval,
        ,
        method: 'post',
        dataType: 'json',
        contentType: false,
        processData: false,
        cache: false,
        success: function (data)  ,
    );

【问题讨论】:

【参考方案1】:

您只能使用content-type: multipart/form-data 发送文件。

function updateblobdata(blobvalue) 
    const formData = new FormData();
    formData.append('blob', blobvalue);

    $.ajax(
        url: 'TestTool_WebService.asmx/UpdateHtmlBLOBContent',
        data: formData,
        method: 'post',
        dataType: 'json',
        contentType: 'multipart/form-data',
        processData: false,
        cache: false,
        success: function (data)  ,
    );

【讨论】:

【参考方案2】:

不,它仍然不工作。它没有达到这一点以获得 blob 值。

 [WebMethod]
    public void UpdateHtmlBLOBContent(string WoNum, string Tagnum, byte[] BLOB, string Mode)
    
        string htmldoc = null;
        using (SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["ConStr1"]))
        

            SqlCommand cmd = new SqlCommand("TestTool_PrototypeprocBlobRun", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Workorder", WoNum);
            cmd.Parameters.AddWithValue("@Equipment", Tagnum);
            cmd.Parameters.AddWithValue("@HTML_blob", BLOB);
            cmd.Parameters.AddWithValue("@MODE", "U");
            con.Open();
            int i = cmd.ExecuteNonQuery();
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            
                htmldoc = "Success";
            
            dr.Close();

        

        Context.Response.Write(htmldoc);
    


【讨论】:

以上是关于如何通过javascript中的ajax调用传递blob值?的主要内容,如果未能解决你的问题,请参考以下文章

通过ajax调用传递动态javascript参数

通过 ajax 将 Javascript 变量传递给 PHP

Laravel + Datatables,如何将id传递给控制器 ?

请教大师们,JavaScript怎么调用.cs文件方法啥的?

通过jQuery ajax调用将值列表传递给django视图

如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?