fix: OnlyOffice/Preview zeigt immer aktuelle Version (kein Cache)
Drei Cache-Ebenen gefixt: - Vue Router: :key=fullPath erzwingt Komponenten-Neuaufbau bei jeder Navigation (kein Wiederverwenden alter Instanzen) - Frontend: Cache-Bust Parameter an Preview + OnlyOffice API-Calls - Backend: No-Cache Headers (Cache-Control, Pragma) auf Preview-Endpunkt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
916971fc1b
commit
5f79ebe9b0
|
|
@ -16,6 +16,13 @@ from app.models.settings import AppSettings
|
||||||
@api_bp.route('/files/<int:file_id>/preview', methods=['GET'])
|
@api_bp.route('/files/<int:file_id>/preview', methods=['GET'])
|
||||||
@token_required
|
@token_required
|
||||||
def preview_file(file_id):
|
def preview_file(file_id):
|
||||||
|
from flask import after_this_request
|
||||||
|
@after_this_request
|
||||||
|
def add_no_cache(response):
|
||||||
|
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
|
||||||
|
response.headers['Pragma'] = 'no-cache'
|
||||||
|
return response
|
||||||
|
|
||||||
user = request.current_user
|
user = request.current_user
|
||||||
f, err = _get_file_or_403(file_id, user, 'read')
|
f, err = _get_file_or_403(file_id, user, 'read')
|
||||||
if err:
|
if err:
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<main class="main-content">
|
<main class="main-content">
|
||||||
<router-view />
|
<router-view :key="$route.fullPath" />
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ const auth = useAuthStore()
|
||||||
const toast = useToast()
|
const toast = useToast()
|
||||||
|
|
||||||
const fileId = route.params.fileId
|
const fileId = route.params.fileId
|
||||||
|
const cacheBust = Date.now()
|
||||||
const fileName = ref('')
|
const fileName = ref('')
|
||||||
const previewType = ref('')
|
const previewType = ref('')
|
||||||
const previewUrl = ref('')
|
const previewUrl = ref('')
|
||||||
|
|
@ -135,12 +136,12 @@ async function loadPreview() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
// For Office files, try OnlyOffice first
|
// For Office files, try OnlyOffice first
|
||||||
const previewRes = await apiClient.get(`/files/${fileId}/preview`)
|
const previewRes = await apiClient.get(`/files/${fileId}/preview?_=${cacheBust}`)
|
||||||
fileName.value = previewRes.data.name || ''
|
fileName.value = previewRes.data.name || ''
|
||||||
|
|
||||||
if (isOfficeFile(fileName.value)) {
|
if (isOfficeFile(fileName.value)) {
|
||||||
try {
|
try {
|
||||||
const ooRes = await apiClient.get(`/files/${fileId}/onlyoffice-config`)
|
const ooRes = await apiClient.get(`/files/${fileId}/onlyoffice-config?_=${cacheBust}`)
|
||||||
if (ooRes.data.available) {
|
if (ooRes.data.available) {
|
||||||
onlyOfficeMode.value = true
|
onlyOfficeMode.value = true
|
||||||
loading.value = false
|
loading.value = false
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue