想自己搭建一个分享东西。有现成的吗?
2 个赞
用worker?
1 个赞
测试
试试
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
if (request.method === 'POST' && url.pathname === '/create') {
return await createSecret(request)
} else if (request.method === 'GET' && url.pathname.startsWith('/secret/')) {
return await getSecret(url.pathname.replace('/secret/', ''))
} else {
return new Response(renderHTML(), {
headers: { 'Content-Type': 'text/html; charset=UTF-8' }
})
}
}
async function createSecret(request) {
const { text } = await request.json()
const id = generateId()
const data = { text, views: 0 }
await works_data.put(id, JSON.stringify(data))
const link = `${new URL(request.url).origin}/secret/${id}`
return new Response(JSON.stringify({ link }), {
headers: { 'Content-Type': 'application/json; charset=UTF-8' }
})
}
async function getSecret(id) {
const value = await works_data.get(id)
if (!value) {
return new Response('Not Found', { status: 404 })
}
const data = JSON.parse(value)
data.views += 1
if (data.views >= 2) {
await works_data.delete(id)
} else {
await works_data.put(id, JSON.stringify(data))
}
return new Response(data.text, {
headers: { 'Content-Type': 'text/plain; charset=UTF-8' }
})
}
function generateId() {
return Math.random().toString(36).substr(2, 10)
}
function renderHTML() {
return `
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>阅后即焚服务</title>
</head>
<body>
<h1>创建一个阅后即焚的链接</h1>
<textarea id="secretText" rows="4" cols="50" placeholder="输入你的秘密"></textarea><br>
<button onclick="createSecret()">生成链接</button>
<p id="link"></p>
<script>
async function createSecret() {
const text = document.getElementById('secretText').value
const response = await fetch('/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8'
},
body: JSON.stringify({ text })
})
const data = await response.json()
document.getElementById('link').textContent = \`你的链接: \${data.link}\`
}
</script>
</body>
</html>
`
}
绑定一下kv变量works_data
设定是生成的链接可以访问两次就销毁,仅支持文本
4 个赞
1 个赞
感谢,拿走了
1 个赞
哈哈哈,不错,就是界面丑了点。
CHATGPT写的还是你自己写的?
1 个赞
AI啊,有现成的干嘛不用
8 个赞
复制粘贴部署即可
https://pastebin.mathisall.cf/hD43
编辑界面默认 short_link_admin
记得创建kv并设置Variable name为shortlink,KV Namespace自己选。
改自这个项目
其实就是在 let link = await shortlink.get(key)
加了行let deletedata = await shortlink.delete(key)
2 个赞
能增加 确认阅读 按钮,防止误操作吗。
你这是自己写的还是AI?
1 个赞
万一忘了点呢,不如给点冗余的访问次数
1 个赞
这种链接发微信,会不会被微信先过滤一遍给你阅读了?
1 个赞
那你就多给点次数,给个五六次次就行,我最新话题有个支持markdown文档的,可以试试
1 个赞
主要就是防止微信机器人给扫一遍收集信息的,所以才阅后即焚。
1 个赞
我试了下,微信没扫,也可能是我这个域名还没解析好,它扫不了
1 个赞
我不会js,提个需求然后ai生成一下改一改呗
1 个赞
这个需求感觉没太大必要,同类型的好像都没,都是用GPT改的,自己提需求
1 个赞
1 个赞
印记
Mark,备忘。