Skip to content

Storage Configuration

The Storage section in appsettings.json defines which storage provider the system uses for file management.
Supported providers:

  • Azure
  • Amazon

Depending on the selected Provider, the corresponding section (Azure or Amazon) must be filled.


1. Provider

"Provider": "Azure" // or "Amazon"
- Azure → Uses Azure Blob Storage
- Amazon → Uses Amazon S3

⚠️ Important: The Provider setting must be the same across all projects to ensure consistent storage behavior.


2. Common Fields

The following fields are common to both providers and define the logical storage folders used in the system.
They are created under the selected provider (Azure/Amazon).

Field Name Description
PublishedContentFolder Stores published content
MBTilerZipsFolder Stores zip files used in MBTiles processing
MapscaleCadsFolder Stores CAD files
FeatureImagesFolder Stores feature images
MBTilerFolder Stores MBTiles files
MapscaleResultsFolder Stores Mapscale processing results
StylesWithContentsFolder Stores style files with metadata
StylesFolder Stores map style files
FilesFolder Stores general files
CadToGeojsonFolder Stores CAD → GeoJSON conversions
GeojsonToPngFolder Stores GeoJSON → PNG conversions
ImdfFolder Stores IMDF format files

3. Provider-Specific Fields

3.1 When Using Azure ("Provider": "Azure")

If Azure is selected, the following fields must be provided:

Field Name Description
ConnectionString Azure Blob Storage connection string
CDN Azure CDN/Blob access URL
SasToken (Optional) Defines temporary access token expiration settings

3.2 When Using Amazon ("Provider": "Amazon")

If Amazon is selected, the following fields must be provided:

Field Name Description
BucketName Name of the S3 bucket
Region AWS region (e.g., eu-central-1)
CDN S3 access URL or CloudFront URL
AccessKey AWS access key
SecretKey AWS secret key

4. API-Specific Configurations

Although all APIs share the same common fields, some APIs require additional Azure settings (SasToken).
Amazon usage remains the same across all APIs.


4.1 Pointr.Microservice.Identity.API

Requires Azure + SasToken (ExpireMinute, ExpireMinuteThreshold).

Example Snippet

"Azure": {
  "ConnectionString": "...",
  "CDN": "https://pointrcdnexample.blob.core.windows.net",
  "SasToken": {
    "ExpireMinute": 360,
    "ExpireMinuteThreshold": 30
  }
}

Explanation

  • ExpireMinute (360) → SAS token is valid for 360 minutes (6 hours).
  • ExpireMinuteThreshold (30) → If the remaining lifetime of the token is less than 30 minutes, a new token will be generated proactively.
    This ensures uninterrupted access without token expiration issues.

Full Example (Pointr.Microservice.Identity.API appsettings.json Storage Section)

"Storage": {
  "Provider": "Azure",
  "Azure": {
    "ConnectionString": "...",
    "CDN": "https://pointrcdnexample.blob.core.windows.net",
    "SasToken": {
      "ExpireMinute": 360,
      "ExpireMinuteThreshold": 30
    }
  },
  "Amazon": {
    "BucketName": "",
    "Region": "",
    "CDN": "",
    "AccessKey": "",
    "SecretKey": ""
  },
  "PublishedContentFolder": "published-content",
  "MBTilerZipsFolder": "mbtiler-zips",
  "MapscaleCadsFolder": "mapscale-cads",
  "FeatureImagesFolder": "feature-images",
  "MBTilerFolder": "mbtiler",
  "MapscaleResultsFolder": "mapscale-results",
  "StylesWithContentsFolder": "style-with-map-metadata",
  "StylesFolder": "styles",
  "FilesFolder": "files",
  "CadToGeojsonFolder": "cad-to-geojson",
  "GeojsonToPngFolder": "geojson-to-png",
  "ImdfFolder": "imdf"
}

4.2 Pointr.Microservice.Content.API

Requires only basic Azure fields (no SasToken).

Example Snippet

"Azure": {
  "ConnectionString": "...",
  "CDN": "https://pointrcdnexample.blob.core.windows.net"
}

Full Example (Pointr.Microservice.Content.API appsettings.json Storage Section)

"Storage": {
  "Provider": "Azure",
  "Azure": {
    "ConnectionString": "...",
    "CDN": "https://pointrcdnexample.blob.core.windows.net"
  },
  "Amazon": {
    "BucketName": "",
    "Region": "",
    "CDN": "",
    "AccessKey": "",
    "SecretKey": ""
  },
  "PublishedContentFolder": "published-content",
  "MBTilerZipsFolder": "mbtiler-zips",
  "MapscaleCadsFolder": "mapscale-cads",
  "FeatureImagesFolder": "feature-images",
  "MBTilerFolder": "mbtiler",
  "MapscaleResultsFolder": "mapscale-results",
  "StylesWithContentsFolder": "style-with-map-metadata",
  "StylesFolder": "styles",
  "FilesFolder": "files",
  "CadToGeojsonFolder": "cad-to-geojson",
  "GeojsonToPngFolder": "geojson-to-png",
  "ImdfFolder": "imdf"
}

4.3 Pointr.Microservice.PublishedContentStream.API

Same as Content.API (only basic Azure fields).

Example Snippet

"Azure": {
  "ConnectionString": "...",
  "CDN": "https://pointrcdnexample.blob.core.windows.net"
}

Full Example (Pointr.Microservice.PublishedContentStream.APIappsettings.json Storage Section)

"Storage": {
  "Provider": "Azure",
  "Azure": {
    "ConnectionString": "...",
    "CDN": "https://pointrcdnexample.blob.core.windows.net"
  },
  "Amazon": {
    "BucketName": "",
    "Region": "",
    "CDN": "",
    "AccessKey": "",
    "SecretKey": ""
  },
  "PublishedContentFolder": "published-content",
  "MBTilerZipsFolder": "mbtiler-zips",
  "MapscaleCadsFolder": "mapscale-cads",
  "FeatureImagesFolder": "feature-images",
  "MBTilerFolder": "mbtiler",
  "MapscaleResultsFolder": "mapscale-results",
  "StylesWithContentsFolder": "style-with-map-metadata",
  "StylesFolder": "styles",
  "FilesFolder": "files",
  "CadToGeojsonFolder": "cad-to-geojson",
  "GeojsonToPngFolder": "geojson-to-png",
  "ImdfFolder": "imdf"
}

4.4 Pointr.Microservice.Utility.API

Requires Azure + SasToken (ReadPermissionExpireDays, WritePermissionExpireHours).

Example Snippet

"Azure": {
  "ConnectionString": "...",
  "CDN": "https://pointrcdnexample.blob.core.windows.net",
  "SasToken": {
    "ReadPermissionExpireDays": 365,
    "WritePermissionExpireHours": 1
  }
}

Explanation

  • ReadPermissionExpireDays (365) → Read permission tokens are valid for 365 days (1 year).
  • WritePermissionExpireHours (1) → Write permission tokens are valid for 1 hour.
    This configuration allows long-term read access while limiting write access for security purposes.

Full Example (Pointr.Microservice.Utility.API appsettings.json Storage Section)

"Storage": {
  "Provider": "Azure",
  "Azure": {
    "ConnectionString": "...",
    "CDN": "https://pointrcdnexample.blob.core.windows.net",
    "SasToken": {
      "ReadPermissionExpireDays": 365,
      "WritePermissionExpireHours": 1
    }
  },
  "Amazon": {
    "BucketName": "",
    "Region": "",
    "CDN": "",
    "AccessKey": "",
    "SecretKey": ""
  },
  "PublishedContentFolder": "published-content",
  "MBTilerZipsFolder": "mbtiler-zips",
  "MapscaleCadsFolder": "mapscale-cads",
  "FeatureImagesFolder": "feature-images",
  "MBTilerFolder": "mbtiler",
  "MapscaleResultsFolder": "mapscale-results",
  "StylesWithContentsFolder": "style-with-map-metadata",
  "StylesFolder": "styles",
  "FilesFolder": "files",
  "CadToGeojsonFolder": "cad-to-geojson",
  "GeojsonToPngFolder": "geojson-to-png",
  "ImdfFolder": "imdf"
}

5. Summary

  • The Provider must be the same across all projects.
  • Pointr.Microservice.Content.API and PublishedContentStream.API → require only basic Azure fields.
  • Pointr.Microservice.Identity.API → requires Azure + SasToken (ExpireMinute, ExpireMinuteThreshold).
  • Pointr.Microservice.Utility.API → requires Azure + SasToken (ReadPermissionExpireDays, WritePermissionExpireHours).
  • Amazon fields are consistent and must be configured if Provider = Amazon.