2017-12-11 9 views
0

私は、光沢のあるプロジェクトで、ユーザーがアップロードした画像と自分のamazon s3サーバーに保存された画像を比較しようとしています。RShiny:複数の画像ファイルを入力してテーブルに入れます

S3からダウンロードしながら、私はこの使用しています:私のデータフレームは、このようなものです

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

::私は入力を取っている

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

を通り

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にfile.copyを使用してフォルダ "www"にコピーしようとしましたが、アプリケーションをデプロイすると機能しません。

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) 
    }) 

}) 
関連する問題