Feature Services can contain attachments that are associated with a single feature ID.
update_features()
enables you to update the attachments of multiple features at once
by generating multiple update requests and performing them in parallel.
Usage
update_attachments(
x,
feature_id,
attachment_id,
path,
.progress = TRUE,
token = arc_token()
)
Arguments
- x
an object of class
FeatureLayer
,Table
, orImageServer
.- feature_id
a vector of object IDs that corresponds to the feature of the corresponding
attachment_id
.- attachment_id
the ID of the attachment—this corresponds to the
id
column returned fromquery_layer_attachments()
- path
a vecetor of the same length as
feature_id
indicating where the attachment exists.- .progress
default
TRUE.
Whether a progress bar should be provided.- token
an
httr2_token
as created byauth_code()
or similar
Details
To rename or otherwise modify an attachment in a Feature Service, you must first download
that attachment, modify the file on disk, and then upload it again. This is a limitation
of ArcGIS Online and Enterprise. If you'd like to see this changed, please submit a community idea at community.esri.com.
If any requests fail, the requests are added as as the errors
attribute to the resultant data.frame
.
References
See API documentation for more.
Examples
if (FALSE) { # \dontrun{
if (interactive()) {
library(arcgisutils)
# authenticate
set_arc_token(auth_user())
# open a feature service
feature_layer <- arc_open("your-item-id") |>
# layer ID of the feature service
get_layer(0)
# query attachment layer information
attachments <- query_layer_attachments(feature_layer)
# create a temporary directory
tmp <- tempdir()
# download attachments to the temporary directory
download_attachments(attachments, tmp)
# get original paths
fps <- file.path(tmp, attachments$name)
# prepend attachments with the date
new_filenames <- paste0(Sys.Date(), "-", basename(attachments$name))
# create new file paths
new_fps <- file.path(dirname(fps), new_filenames)
# rename the files
file.rename(fps, new_fps)
# update the attachments
update_res <- update_attachments(
feature_layer,
# OID of the feature <> attachment relationship
attachments$parentObjectId,
# the attachment ID
attachments$id,
# the path to the attachment on disk
new_fps
)
}
} # }