mirror of
https://github.com/Yidadaa/ChatGPT-Next-Web.git
synced 2025-08-08 14:02:08 +08:00
feat: 1. using cache storage store image data; 2. get base64image before chat to api #5013
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
const CHATGPT_NEXT_WEB_CACHE = "chatgpt-next-web-cache";
|
||||
const CHATGPT_NEXT_WEB_FILE_CACHE = "chatgpt-next-web-file";
|
||||
let a="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";let nanoid=(e=21)=>{let t="",r=crypto.getRandomValues(new Uint8Array(e));for(let n=0;n<e;n++)t+=a[63&r[n]];return t};
|
||||
|
||||
self.addEventListener("activate", function (event) {
|
||||
console.log("ServiceWorker activated.");
|
||||
});
|
||||
|
||||
self.addEventListener("install", function (event) {
|
||||
self.skipWaiting(); // enable new version
|
||||
event.waitUntil(
|
||||
caches.open(CHATGPT_NEXT_WEB_CACHE).then(function (cache) {
|
||||
return cache.addAll([]);
|
||||
@@ -12,4 +15,45 @@ self.addEventListener("install", function (event) {
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener("fetch", (e) => {});
|
||||
async function upload(request, url) {
|
||||
const formData = await request.formData()
|
||||
const file = formData.getAll('file')[0]
|
||||
let ext = file.name.split('.').pop()
|
||||
if (ext === 'blob') {
|
||||
ext = file.type.split('/').pop()
|
||||
}
|
||||
const fileUrl = `${url.origin}/api/cache/${nanoid()}.${ext}`
|
||||
// console.debug('file', file, fileUrl, request)
|
||||
const cache = await caches.open(CHATGPT_NEXT_WEB_FILE_CACHE)
|
||||
await cache.put(new Request(fileUrl), new Response(file, {
|
||||
headers: {
|
||||
'content-type': file.type,
|
||||
'content-length': file.size,
|
||||
'cache-control': 'no-cache', // file already store in disk
|
||||
'server': 'ServiceWorker',
|
||||
}
|
||||
}))
|
||||
return Response.json({ code: 0, data: fileUrl })
|
||||
}
|
||||
|
||||
async function remove(request, url) {
|
||||
const cache = await caches.open(CHATGPT_NEXT_WEB_FILE_CACHE)
|
||||
const res = await cache.delete(request.url)
|
||||
return Response.json({ code: 0 })
|
||||
}
|
||||
|
||||
self.addEventListener("fetch", (e) => {
|
||||
const url = new URL(e.request.url);
|
||||
if (/^\/api\/cache/.test(url.pathname)) {
|
||||
if ('GET' == e.request.method) {
|
||||
e.respondWith(caches.match(e.request))
|
||||
}
|
||||
if ('POST' == e.request.method) {
|
||||
e.respondWith(upload(e.request, url))
|
||||
}
|
||||
if ('DELETE' == e.request.method) {
|
||||
e.respondWith(remove(e.request, url))
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@@ -2,8 +2,15 @@ if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', function () {
|
||||
navigator.serviceWorker.register('/serviceWorker.js').then(function (registration) {
|
||||
console.log('ServiceWorker registration successful with scope: ', registration.scope);
|
||||
registration.update().then(res => {
|
||||
console.log('ServiceWorker registration update: ', res);
|
||||
});
|
||||
}, function (err) {
|
||||
console.error('ServiceWorker registration failed: ', err);
|
||||
});
|
||||
navigator.serviceWorker.addEventListener('controllerchange', function() {
|
||||
console.log('ServiceWorker controllerchange ');
|
||||
window.location.reload(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user