3

图像的 Base64 编码是 R Studio Markdown 中一个非常酷的小功能,它可以创建易于分发或共享的所有 HTML 页面。无需担心将图像作为单独的文件。浏览器知道如何处理它。

我也想将此功能扩展到编码 CSV 文件。看看他们现在是如何做的,看起来他们正在将信息传递给 .Call 并使用 C/C++ 对文件信息进行编码。

来自(第 177 和 192 行):https ://github.com/rstudio/markdown/blob/master/R/renderMarkdown.R

.b64EncodeFile <- function(inFile)
{
   fileSize <- file.info(inFile)$size

   if (fileSize > 0){
      paste( "data:", .mimeType(inFile),";base64,",
         .Call(rmd_b64encode_data,readBin(inFile,'raw',n=fileSize)),
         sep='')
   } else {
      warning(inFile,'is empty!')
      inFile
   }
}


.b64EncodeImages <- function(html)
{
   reg <- "<\\s*[Ii][Mm][Gg]\\s+[Ss][Rr][Cc]\\s*=\\s*[\"']([^\"']+)[\"']"
   m <- gregexpr(reg,html,perl=TRUE)
   if (m[[1]][1] != -1)
   {
      .b64EncodeImgSrc <- function(imgSrc)
      {
         inFile <- sub(reg,"\\1",imgSrc)
         if (length(inFile) && file.exists(inFile))
            imgSrc <- sub(inFile,.b64EncodeFile(inFile),imgSrc,fixed=TRUE)

         imgSrc
      }
      regmatches(html,m) <- list(unlist(lapply(regmatches(html,m)[[1]],.b64EncodeImgSrc)))
   }

   html
}

现在,我如何使用 CSV 文件完成同样的事情?重要的是,我如何让浏览器理解它。

4

1 回答 1

4

如果我没看错你的意图,如果你用 HREF 属性中的编码数据制作了一个 A 元素,那么单击链接将获取文件。刚刚用我躺在身边的编码图像块测试了这个:

<a href="data:image/jpeg;base64,[blah blah blah]">Click Me</a>

因此,只要您设置了 mime 类型(文本/某些东西?),您需要做的就是构建该元素并将其粘贴到您的 HTML 文件中。用户单击链接,文件下载开始,来自其嵌入的 base64 编码。排序。缺少 mime 类型的完整示例,它只让浏览器读取它:

<html>
<head>
</head>
<body>
<h1>Test</h1>
<a href="data:;base64,aWQsbmFtZSxhZ2UKMSwiRnJlZCBGb28iLDk5CjIsIkpvZSBCbG9nZ3MiLDIyCg==">click me</a>
</body>
</html>

该数据字符串的来源:

> markdown:::.b64EncodeFile("test.csv")
[1] "data:;base64,aWQsbmFtZSxhZ2UKMSwiRnJlZCBGb28iLDk5CjIsIkpvZSBCbG9nZ3MiLDIyCg=="
于 2012-08-31T07:54:47.867 回答