Написание Curl POST на R: загрузка изображения на веб-сайт

#r #image #curl #post

#r #изображение #curl #Публикация

Вопрос:

Я пытаюсь загрузить изображение на веб-сайт. Ниже приведена успешная функция curl:

 curl --location --request POST 'http://xxxxx?laboratoryResultVisibleId=LR-116807amp;assayAttribute=Traceamp;onBehalfOf=minnie' 
--header 'Authorization: Basic U1JWR0JMLUdEQklPTDpQZjgyNTE5Mw==' 
--form 'imageFile=@/C:/Users/minnie/Downloads/plot.png'
  

Я пишу свой R-код следующим образом:

 username <- "minnie"
url <- "http://xxxxx"
auth <- authenticate(user='abc', password='xyz', type="basic")
header <- list(username)
names(header) <- "X-On-Behalf-Of"

filepath <- "C:/Users/minnie/Downloads/plot.png"

post_zip <- httr::POST(
  url = url,
  auth,
  body = list(
              laboratoryResultVisibleId = 'LR-116807',
              assayAttribute = 'Trace',
              file = httr::upload_file(filepath), 
              userid = username
              ),
  httr::add_headers("Content-Type"="multipart/form-data")
)

post_zip
content(post_zip, "text")
  

и я получил следующий отзыв:

 Response [http://xxxxx]
  Date: 2020-11-18 22:30
  Status: 200
  Content-Type: application/json;charset=UTF-8
  Size: 43 B

> content(post_zip, "text")
[1] "{"success":false,"message":"No File found"}"
  

Кажется, что файл не найден. Есть какие-нибудь подсказки? Большое спасибо за вашу помощь 🙂

Комментарии:

1. Вы убедились, что это true file.exists() с полным путем к файлу в скобках

2. > file.exists(«plot.png») [1] ВЕРНО

3. Подождите, почему бы не пойти простым путем и просто выполнить успешную команду curl? Если в файле Rmarkdown просто сделать фрагмент кода фрагментом bash?

4. Я пытаюсь подключить R shiny к веб-сайту, и, следовательно, это должен быть R-код. Это своего рода конвейер автоматизации.

Ответ №1:

Я чувствую, что это как-то связано с http и https, можете ли вы попробовать перейти на https?

Комментарии:

1. Это должно быть «http». Я подтвердил.

Ответ №2:

Проблема заключается в пути к файлу. Мы должны использовать файл.функция path () в R сообщает серверу, что это путь к файлу, а не символьная строка.

 filepath <- file.path(getwd(), "plot.png")

post_zip <- httr::POST(
  url = url,
  auth,
  body = list(
              laboratoryResultVisibleId = 'LR-116807',
              assayAttribute = 'Trace',
              imageFile = httr::upload_file(filepath), 
              userid = username
              ),
  httr::add_headers("Content-Type"="multipart/form-data")
)

post_zip
content(post_zip, "text")