Cannot open local file - Chrome: Not allowed to load local resource

后端 未结 14 1705
不知归路
不知归路 2020-11-22 12:01

Test browser: Version of Chrome: 52.0.2743.116

It is a simple javascript that is to open an image file from local like \'C:\\002.jpg\'

function run(         


        
14条回答
  •  时光说笑
    2020-11-22 12:47

    You just need to replace all image network paths to byte strings in stored Encoded HTML string. For this you required HtmlAgilityPack to convert Html string to Html document. https://www.nuget.org/packages/HtmlAgilityPack

    Find Below code to convert each image src network path(or local path) to byte sting. It will definitely display all images with network path(or local path) in IE,chrome and firefox.

    string encodedHtmlString = Emailmodel.DtEmailFields.Rows[0]["Body"].ToString();
    
    // Decode the encoded string.
    StringWriter myWriter = new StringWriter();
    HttpUtility.HtmlDecode(encodedHtmlString, myWriter);
    string DecodedHtmlString = myWriter.ToString();
    
    //find and replace each img src with byte string
    HtmlDocument document = new HtmlDocument();
    document.LoadHtml(DecodedHtmlString);
    document.DocumentNode.Descendants("img")
        .Where(e =>
        {
            string src = e.GetAttributeValue("src", null) ?? "";
            return !string.IsNullOrEmpty(src);//&& src.StartsWith("data:image");
        })
        .ToList()
        .ForEach(x =>
            {
            string currentSrcValue = x.GetAttributeValue("src", null);                                
            string filePath = Path.GetDirectoryName(currentSrcValue) + "\\";
            string filename = Path.GetFileName(currentSrcValue);
            string contenttype = "image/" + Path.GetExtension(filename).Replace(".", "");
            FileStream fs = new FileStream(filePath + filename, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            Byte[] bytes = br.ReadBytes((Int32)fs.Length);
            br.Close();
            fs.Close();
            x.SetAttributeValue("src", "data:" + contenttype + ";base64," + Convert.ToBase64String(bytes));                                
        });
    
    string result = document.DocumentNode.OuterHtml;
    //Encode HTML string
    string myEncodedString = HttpUtility.HtmlEncode(result);
    
    Emailmodel.DtEmailFields.Rows[0]["Body"] = myEncodedString;
    

提交回复
热议问题