As of 1/19/17 we have updated some undocumented functionality in our Device Handler base. We have limited S3 access to no longer allow sharing s3 assets across devices. We have found the feature to be of limited use internally and we have security concerns in its current state and therefore will not be expanding it to a fully documented and supported feature of the platform. We have shut it down but are investigating other options to allow short term storage to S3 for devices and SmartApps. But, as of now we have no immediate timeline to add the functionality.
Our Image Carousel capability (used by 6 internal device types) has relied on this capability and we have implemented a hotfix in the platform to allow for Image Carousel devices to continue to store and retrieve images as before. At the switch over, any device with the image carousel capability will lose access to the images currently stored at the time of the deploy (12PM PST on 1/19/2017) but all installs of Image Carousel capable devices will immediately begin to populate and access images correctly from the deploy forward.
Custom device types that rely on the undocumented and unsupported method getS3Object will no longer access S3 data correctly. We apologize for any inconvenience.
To allow users to still be able to access the data they are storing via the storeImage method a new method is being added:
ByteArrayInputStream getImage(String name)
This method will handle converting and closing the S3Object for you. The name parameter corresponds to the name used to save the image. Images saved to S3 before the change will not be available but all new images saved after the release will be retrievable. Note: image names saved are limited to alphanumeric, “_”, “.”, and “-” characters.
As we investigate the needs for a storage mechanism for larger data than our Device State storage allows, we will certainly let you know.
We do sincerely apologize for the inconvenience and hope that you can understand that security is always out number 1 priority.