Я сохранил некоторые данные на SQL сервере в виде большого двоичного объекта. Если я делаю прямой запрос к базе данных, столбцы больших двоичных объектов возвращаются как необработанные данные (шестнадцатеричные), которые я затем могу использовать для записи большого двоичного объекта в виде файлов в конечной системе.
library(jsonlite)
library(DBI)
con <- dbConnect(odbc::odbc(), Driver = "SQL Server", Server = "localhost\\sql2019",
Database = "DocumentData", Trusted_Connection = "True")
blobs <- dbGetQuery(con,"select * from Blob")
str(blobs$spectra[2][[1]]) #this returns raw [1:1678544] ff d8 ff e0 ...
Но если я выполню тот же запрос через веб-службу, шестнадцатеричные данные возвращаются в виде строки. Шестнадцатеричные цифры в обоих случаях одинаковы. Вот пример кода:
data<-jsonlite::fromJSON("https://localhost:5001/Spectra")
str(data$spectraBLOB) #this returns chr "FFD8FFE0"| __truncated__
Итак, мой вопрос в том, как преобразовать массив символов (шестнадцатеричных цифр) в необработанный вектор, чтобы я мог использовать шестнадцатеричные необработанные данные для воссоздания файла в конечной системе . Пример кода, который сохраняет вектор исходных данных в файл в конечной системе:
rawToJpeg <- function(pic_data) {
f = file(paste0('c:/temp/blob_file.jpg'), "wb")
writeBin(object = pic_data, con = f)
close(f)
}
rawToJpeg(blobs$spectra[2][[1]])#works with raw data
rawToJpeg(data$spectraBLOB) #does not work as expected with string of hexadecimal
Есть идеи, как go решить эту проблему (или изменить тип шестнадцатеричной строки на шестнадцатеричную исходную)?