2012-08-31 63 views
3

圖像的Base64編碼中的R工作室降價一個很酷的小功能,創建所有在那些容易散發或共享一個HTML頁面。無需擔心將圖像作爲單獨的文件。瀏覽器知道如何處理它。Base64編碼的CSV有R降價

我想延長這一功能編碼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

如果我讀了你的意圖吧,如果你讓一個A元素與href屬性中的編碼數據,則該鏈接將得到的文件上點擊。只是編碼的圖像塊我已經躺在附近測試此:

<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=="