2017-12-11 18 views
0

나는 반짝이는 프로젝트를 작업하여 사용자가 업로드 한 이미지와 내 amazon s3 서버에 저장된 이미지를 비교하려고합니다. 내가 같이 입력을 데려 갈거야RShiny : 여러 이미지 파일을 입력하고 테이블에 넣으십시오.

save_object(object=xyz ,bucket = "xyz", file = paste0("www/",xyz,".jpg")) 

:

(S3)에서 다운로드하는 동안, 나는이 사용하고

fileInput("image","upload the image") 

내 dataframe은 다음과 같이이다 :

a$name<- xyz 

a$server_image<- paste0("<img src=",'"',"xyz.jpg",'"'," ","height=",'"',"300",'"',"></img>") 

a$uploaded_image<- paste0("<img src=",'"',input$image$datapath,'"'," ","height=",'"',"300",'"',"></img>") 

나 ' 아래처럼 출력을 얻으 려합니다. 이 경우

output$output_table<-DT::renderDataTable({DT::datatable(a,escape = FALSE)}) 

는 "WWW /"디렉토리의 AWS S3에서 다운로드 한 이미지가 제대로 표에 보여하지만, 업로드 된 이미지를 볼에 문제가 있습니다.

입력 $ image에서 "www"폴더로 복사하기 위해 file.copy를 사용하려고했지만 앱을 배포 할 때도 작동하지 않습니다.

renderImage를 사용하지 않고 fileInput 및 View를 사용하여 가져온 이미지를 보려면 어떻게해야합니까?

답변

0

파일이 www에 복사되기 전에 앱이 <img src=...을 렌더링하는 것으로 의심됩니다.

해결 방법은 이미지를 base64 인코딩으로 변환 한 다음 base64 문자열의 이미지를 포함하는 테이블을 렌더링하는 것입니다.

library(shiny) 
library(DT) 

ui <- shinyUI(
    fluidPage(
    fileInput("image", "upload image"), 
    DT::dataTableOutput("table") 
) 
) 

server <- shinyServer(function(input, output) { 

    base64 <- eventReactive(input$image, { 
    base64enc::dataURI(file=input$image$datapath, mime=input$image$type) 
    }) 

    output$table <- DT::renderDataTable({ 
    req(input$image) 
    dat <- data.frame(image = sprintf('<img src=%s height="300"></img>', base64())) 
    datatable(dat, escape=FALSE) 
    }) 

})