fix(mindspace): 公开页上传图片物化到 static 路径供转发访问
Finish 同步与首次访问时将私有资产 API 图片复制到 public/.tmp-images, 避免其他用户转发链接后因无登录态无法加载页面内图片。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -249,6 +249,58 @@ test('syncPublicHtmlAfterFinish registers existing public html artifacts for the
|
||||
}
|
||||
});
|
||||
|
||||
test('syncPublicHtmlAfterFinish materializes private image assets into public html files', async () => {
|
||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'public-finish-sync-assets-'));
|
||||
const publishDir = path.join(root, 'MindSpace', CURRENT_USER.id);
|
||||
const storageRoot = path.join(root, 'storage');
|
||||
const assetId = '55555555-5555-4555-8555-555555555555';
|
||||
const storageKey = `users/${CURRENT_USER.id}/assets/${assetId}/versions/v1`;
|
||||
fs.mkdirSync(path.dirname(path.join(storageRoot, storageKey)), { recursive: true });
|
||||
fs.writeFileSync(path.join(storageRoot, storageKey), Buffer.from([0xff, 0xd8, 0xff, 0xd9]));
|
||||
try {
|
||||
fs.mkdirSync(path.join(publishDir, 'public'), { recursive: true });
|
||||
fs.writeFileSync(
|
||||
path.join(publishDir, 'public/tea.html'),
|
||||
`<!doctype html><img src="/api/mindspace/v1/assets/${assetId}/download?inline=1">`,
|
||||
);
|
||||
const messages = [
|
||||
{
|
||||
id: 'msg-tea-1',
|
||||
role: 'assistant',
|
||||
content: [
|
||||
{
|
||||
type: 'text',
|
||||
text: `[茶馆](https://m.tkmind.cn/MindSpace/${CURRENT_USER.id}/public/tea.html)`,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
const pool = {
|
||||
query: async () => [
|
||||
[{ id: assetId, mime_type: 'image/jpeg', original_filename: 'tea.jpg', storage_key: storageKey }],
|
||||
],
|
||||
};
|
||||
|
||||
const result = await syncPublicHtmlAfterFinish({
|
||||
messages,
|
||||
currentUser: CURRENT_USER,
|
||||
publishDir,
|
||||
sessionId: 'session-tea',
|
||||
pool,
|
||||
storageRoot,
|
||||
h5Root: root,
|
||||
syncWorkspaceAssets: async () => {},
|
||||
});
|
||||
|
||||
assert.equal(result.assetMaterialization.materialized.length, 1);
|
||||
const saved = fs.readFileSync(path.join(publishDir, 'public/tea.html'), 'utf8');
|
||||
assert.match(saved, /\.tmp-images\/55555555-5555-4555-8555-555555555555\.jpg/);
|
||||
assert.ok(fs.existsSync(path.join(publishDir, 'public/.tmp-images', `${assetId}.jpg`)));
|
||||
} finally {
|
||||
fs.rmSync(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test('collectOwnPublicHtmlArtifactRefs includes source message ids when available', () => {
|
||||
const publishDir = fs.mkdtempSync(path.join(os.tmpdir(), 'public-finish-sync-'));
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user