iOfficeAI/AionUi · error · Error

Image file not found

Error message

Image file not found

What it means

loadImage in ImageViewer throws 'Image file not found' when the IPC content read returns empty/falsy — either fs.readContent with a dataurl encoding on a ChatFileRef, or the legacy getImageBase64 endpoint with {path, workspace}. It means the file could not be read as content (missing, unreadable, or unsupported), distinct from an IPC exception which lands in the catch block.

Solutions

  1. Verify the file still exists at fileRef/path inside the expected workspace
  2. Ensure the correct workspace is passed for legacy {path, workspace} calls
  3. Re-attach or re-export the image if the source was deleted
  4. If it recurs for existing files, check main-process logs for the underlying fs read failure
Defensive patterns

Strategy: try-catch

Validate before calling

if (!fileRef && !file_path) return; // nothing to load

Try / catch

try {
  const b64 = fileRef
    ? await ipcBridge.fs.readContent.invoke({ file: fileRef, encoding: 'dataurl' })
    : await ipcBridge.fs.getImageBase64.invoke({ path: file_path!, workspace });
  if (!b64) return; // show placeholder instead of throwing
  setImageSrc(b64);
} catch (err) {
  console.error('[ImagePreview] load failed', err);
  setFailed(true); // render fallback UI
}

Prevention

When it happens

Trigger: fileRef pointing to a deleted or moved attachment; legacy path-based lookup where workspace is wrong; image larger than a size cap causing the main process to return null; zero-byte file.

Common situations: Conversation history referencing attachments cleaned from disk, workspace switched after the message was created, or files on removable/network storage that are offline.

Related errors


AI-assisted analysis of iOfficeAI/AionUi@711aa0550e (2026-08-28). Data as JSON: /api/errors/0d96e4c7b07513bb. Report an issue: GitHub.

Appendix: source

Thrown at packages/desktop/src/renderer/pages/conversation/Preview/components/viewers/ImageViewer.tsx:53

        return;
      }

      if (!fileRef && !file_path) {
        setImageSrc('');
        setLoading(false);
        return;
      }

      try {
        setLoading(true);
        setError(null);
        // Prefer the ChatFileRef identity (data-URL from /api/fs/content); fall back
        // to the legacy {path, workspace} image endpoint for callers not yet migrated.
        const base64 = fileRef
          ? await ipcBridge.fs.readContent.invoke({ file: fileRef, encoding: 'dataurl' })
          : await ipcBridge.fs.getImageBase64.invoke({ path: file_path!, workspace });
        if (!base64) {
          throw new Error('Image file not found');
        }
        if (!isMounted) return;
        setImageSrc(base64);
      } catch (err) {
        if (!isMounted) return;
        console.error('[ImagePreview] Failed to load image:', err);
        setError(t('messages.imageLoadFailed', { defaultValue: 'Failed to load image' }));
      } finally {
        if (isMounted) {
          setLoading(false);
        }
      }
    };

    void loadImage();

    return () => {
      isMounted = false;

View on GitHub (pinned to 711aa0550e)