Я создаю блестящее приложение, в котором я хочу иметь возможность показывать динамически выбранные изображения из моего Dropbox без необходимости их загрузки. В большинстве случаев я использую rdrop2. Вот что у меня есть (сокращенная версия).
library(shiny)
library(shinydashboard)
library(rdrop2)
library(httr)
drop_auth(rdstoken = "token.rds")
ui <- dashboardPage(title = "digiHerb",
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
column(width=12,
# print url (just for for troubleshooting, and the url is showing correctly)
box(width = NULL,
textOutput('path')),
# Method 1
box(width = NULL,
htmlOutput("picture"))
# Method 2 - iframe
,
box(width=NULL,
uiOutput('myIFrame'))
# Method 3
,
box(width = NULL,
uiOutput("img"))
#alternative method - fails with error 'cant find function GET'
#,
#box(width = NULL,
# htmlOutput("includeHTML"))
))
)
server <- function(input, output, session) {
# get a list of the images from dropbox - they areall shared publically
shared <- drop_list_shared_links(verbose = F)
l <- length(shared$links)
sharedBefore <- data.frame()
for(i in 1:l){
sharedBefore[i,1] <- shared$links[[i]]$name
sharedBefore[i,2] <- shared$links[[i]]$url
}
colnames(sharedBefore) <- c("names", "url")
# using just a static entry for now (first entry) - this will become dynamic
preview <- sharedBefore[1,"url"]
output$path <- renderText(print(preview))
# Method 1
output$picture<-renderText({
c('<img src="',
preview,
'">')
})
# Method 2 - iframe
output$myIFrame<-renderUI({
tags$iframe(src = preview)
})
# Method 3:
output$img <- renderUI({
tags$img(src = preview, width="100%")
})
# Alternative method 2:
#request <- httr::GET(url=preview)
#dropB <- httr::content(request, as="text")
#output$includeHTML <- renderText({
# dropB
#})
}
shinyApp(ui = ui, server = server)
Есть ли у кого-нибудь предложения, почему ни один из этих методов не работает? Приложение размещено и протестировано на shinyapps.io. В журнале нет ошибок.
РЕДАКТИРОВАТЬ 10.08: Думаю, я нашел источник проблемы. Блестящее приложение появляется в Интернете с этими маленькими символами на месте картинок: введите описание изображения здесь Если я щелкну его правой кнопкой мыши и нажму «открыть изображение в новой вкладке», я перейду к правильному изображению (на самом деле, я бы предпочел, чтобы меня перевели на URL-адрес предварительного просмотра для этого изображения, а не на фактическое изображение, поэтому, если кто-нибудь теперь, как выполнить sh это тоже, пожалуйста, поделитесь.) Если вместо этого я нажимаю inspect, а затем просматриваю консоль, я вижу, что есть ошибка, которая гласит:
Refused to display 'https://www.dropbox.com/..........JPG?dl=0' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' ".
Мне кажется, что dropbox не позволяя мне просматривать изображение «удаленно» или как это называть. Так что я не решил вопрос - я все еще не понимаю, как решить эту проблему.