【问题标题】:Passing File Path From Javascript to C# Using Ajax Web Service使用 Ajax Web 服务将文件路径从 Javascript 传递到 C#
【发布时间】:2011-10-06 21:57:56
【问题描述】:

我有一个带有按钮的 ASP.Net 网站,这些按钮将文件路径传递给 javascript 函数,该函数执行对 web 方法的 ajax 调用。您在下面看到的传递给 openDoc 的文件路径是 JSON.stringify(\fs01\Documents...)

的结果
  <input type="button" id="b0" value="Open" onclick="openDoc('&quot;\\\\fs01\\Documents\\2011\\MEASEJA\\1108030203&nbsp;(1)&nbsp;10-3-2011&nbsp;Mart&nbsp;Cart&nbsp;Service&nbsp;Completion&nbsp;Survey.pdf&quot;');">

    function openDoc(filename) {
    var xml = new XMLHttpRequest();
    xml.open("POST", "Default.aspx", true);
    xml.onreadystatechange = function () {
        if (xml.readyState == 4) {
            if (xml.status == 200) {
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    contentType: "application/json",
                    url: "Service.asmx/openDoc",
                    data: '{ file:' + filename + '}',
                    success: function () { },
                    error: function (xml, status, error) {
                        var err = eval("(" + xml.responseText + ")");
                        alert("Open Doc: " + xml.Message);
                    }
                });
            }
        }
    }
    xml.send(null);
}

[WebMethod]
public byte[] openDoc(string file)
{
    FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
    byte[] buffer;

    try
    {
        int length = (int)fs.Length;
        buffer = new byte[length];
        int count;
        int sum = 0;

        while ((count = fs.Read(buffer, sum, length - sum)) > 0)
            sum += count;
    }
    catch (Exception ex)
    {
        throw (ex);
    }
    finally
    {
        fs.Close();   
    }

    return buffer;
}

问题是,在此过程中,文件路径中的 \ 发生了一些事情,并使用 firebug 从 ajax 调用接收到这样的错误:

"无法识别的转义序列。(16): { file:"\fs01\Documents\2011\MEASEJA\1108030203 (1) 10-3-2011 Mart Cart Service Completion Survey.pdf"}"

我知道在 C# 中您必须将所有 \ 加倍,但这就是文件路径从按钮单击开始的方式。在某个地方,我丢失了额外的 \ 并且 C# 无法将其作为文件处理。

【问题讨论】:

    标签: c# javascript json


    【解决方案1】:

    尝试查找单个反斜杠并在需要时加倍

    //pseudocode
    if (s.StartsWith(@"\f")) s.Prepend(@"\");
    

    【讨论】:

    • 在我将它作为参数传递给 ajax 之前?
    • 实际上,从头开始。现在我仔细看,我知道你要做什么。我会试一试,然后告诉你。
    • 添加 if (file.StartsWith(@"\f")) { file = @"\" + file; } 到 web 方法的开头,但我得到了同样的错误。
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2011-04-18
    • 2016-03-20
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多