2012-08-31 5 views
3

이미지의 Base64 인코딩은 배포하거나 공유하기 쉬운 HTML 페이지를 모두 만드는 R Studio Markdown의 정말 멋진 기능입니다. 이미지를 별도의 파일로 유지하는 것에 대해 걱정할 필요가 없습니다. 브라우저는 어떻게 처리해야하는지 알고 있습니다.R Markdown이있는 CSV 용 Base64 인코딩

이 기능을 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

의도를 올바르게 읽으면 HREF 속성의 인코딩 된 데이터로 A 요소를 만든 다음 링크를 클릭하면 파일이 생성됩니다. 그냥 주위에 거짓말을했다 인코딩 된 이미지 블록이 테스트 :

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

그래서만큼 당신이 MIME 형식을 설정으로 당신이 할 필요가있는 해당 요소를 구성하고 HTML 파일에 스틱입니다 (텍스트/뭔가를?) . 사용자는 내장 된 base64 인코딩에서 파일 다운로드 링크를 클릭합니다. 정렬. 단지 브라우저를 할 수 있습니다 누락 된 마임 타입으로 전체 예제는 읽기 :

> markdown:::.b64EncodeFile("test.csv") 
[1] "data:;base64,aWQsbmFtZSxhZ2UKMSwiRnJlZCBGb28iLDk5CjIsIkpvZSBCbG9nZ3MiLDIyCg==" 
: 데이터 문자열에서 온

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