Question Image Upload
Presenters can attach an image to any question. The image is displayed to participants above the question text and answer options during a live session.
Images are stored in Azure Blob Storage and served directly from there via a public URL.
How It Works
- In the Poll Editor, open any question.
- Click the Add Image button (camera icon) in the question header.
- Select a local file — the upload begins immediately.
- A preview of the image appears in the editor once the upload succeeds.
- The image URL is saved with the question and sent to participants when the question is activated.
To replace an image, click the existing preview and choose a new file. The old image is deleted from Blob Storage automatically.
To remove an image, click the × button on the preview. The blob is deleted and the question reverts to text-only.
File Constraints
| Constraint | Limit |
|---|---|
| Maximum file size | 2 MB |
| Accepted formats | JPEG, PNG, GIF, WebP |
| Storage | Azure Blob Storage (question-images container) |
Files that exceed 2 MB or use an unsupported format are rejected with an inline error before upload begins.
Required Environment Variables
Image upload is disabled if AZURE_BLOB_CONNECTION_STRING is not set. The backend logs a warning on startup and returns 503 Service Unavailable for any upload request.
| Variable | Required | Description |
|---|---|---|
AZURE_BLOB_CONNECTION_STRING | Yes | Azure Storage connection string. Found in the Azure Portal under Storage account → Access keys. |
AZURE_BLOB_CONTAINER_NAME | No (default: question-images) | Name of the blob container. Must exist before the backend starts, or be created manually via the Azure Portal or CLI. |
Add these to your .env file (local) or as App Service application settings (production).
Creating the Blob Container
If the container does not exist, create it before starting the backend:
az storage container create \
--name question-images \
--account-name <storage-account-name> \
--public-access blob
Setting --public-access blob makes the container's blobs publicly readable by URL (required so participants can view question images without authentication). Do not store sensitive data in this container.
How Images Are Served
Uploaded images are assigned a random UUID filename (e.g., a3f2e1b0-….png) and stored in the configured container. The backend returns the direct Azure Blob Storage URL for the image (e.g., https://<account>.blob.core.windows.net/question-images/<uuid>.png).
This URL is embedded in the question payload and loaded by participants' browsers directly from Azure CDN — it does not proxy through the NextGenPoll API.
Storage Cost Considerations
Azure Blob Storage pricing is based on:
- Storage capacity — images accumulate over time as questions are created. Deleted questions trigger blob deletion automatically.
- Outbound data transfer — each participant loading a question image counts as a data transfer from Azure.
For typical educational or presentation use, costs are low (a few cents per month for hundreds of images with moderate traffic). Monitor usage in the Azure Portal → Storage account → Metrics if costs become a concern.
Disabling Image Upload
If you do not want to use image upload (e.g., to keep the deployment simpler), simply omit AZURE_BLOB_CONNECTION_STRING from your environment. The upload button will be hidden in the UI and all upload API calls will return 503. All other poll functionality works normally.