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
idcolumn returned fromquery_layer_attachments()- path
a vecetor of the same length as
feature_idindicating where the attachment exists.- .progress
default
TRUE.Whether a progress bar should be provided.- token
an
httr2_tokenas 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
)
}
} # }