3

画像のBase64エンコーディングは、R Studio Markdownの非常に優れた小さな機能であり、配布や共有が簡単な1つの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-typeが欠落している完全な例:

<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 に答える