Skip to content
Closed

Dev #21

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
c1ea64b
refactor(sdk): 重构
Apr 8, 2025
fa0e5c8
refactor(server): 重构接口
Apr 8, 2025
0e7e3ea
feat: 优化
Apr 10, 2025
ba2bf4b
refactor: 使用最新sdk
Apr 10, 2025
bca5da6
fix: 异步设置fileList默认值
Apr 10, 2025
3b048c4
chore: 代码格式化
Apr 10, 2025
f141ef0
fix: uploads目录不存在就创建目录
Apr 10, 2025
c5d08c5
chore: git忽略server下uploads目录
Apr 10, 2025
ba10c02
feat: 设置file的data,用来上传参数
Apr 10, 2025
5f5caeb
feat: 上传参数支持自定义
Apr 10, 2025
1e35337
feat: 添加WaitMerge状态
Apr 10, 2025
8e894de
feat: 添加WaitMerge状态
Apr 11, 2025
72a07a4
feat: 优化
Apr 14, 2025
66346d3
feat: 优化checkRequest和mergeRequst
Apr 15, 2025
53eccf0
refactor: Container.js
May 9, 2025
34069f0
refactor: Event.js
May 9, 2025
c5d95ce
refactor: reqeust.js
May 9, 2025
43ab5a8
refactor: chunk.js
May 12, 2025
584aac2
refactor: uploader.hs
May 12, 2025
549efcc
refactor: uploader.js
May 12, 2025
8f1c0dd
refactor: file.js
May 12, 2025
5f569aa
refactor: 入口文件
May 12, 2025
9f3d537
chore: _fileList
May 12, 2025
8c16d48
chore: 删除多余代码
May 12, 2025
1c77faa
feat: processData功能
May 12, 2025
f47def9
feat: processData功能
May 12, 2025
1b17a7f
feat: data和headers支持函数
May 12, 2025
3f6e1bd
feat: check data is plainObject
May 13, 2025
14b2a2f
feat: 上传接口增加query参数来记录options.data和file.data
May 13, 2025
a079d3f
feat: 增加destroy方法, 卸载事件监听等
May 13, 2025
ebd3a0b
chore: package.json
May 13, 2025
f4cb11b
feat: examples
May 13, 2025
8cd5cfb
feat: examples 支持配置server
May 13, 2025
283291a
chore: package.json
May 14, 2025
e84e187
ci: gh-page
May 14, 2025
dda88e3
fix: checkRequest默认值
May 14, 2025
0a22c0c
docs(sdk): server
May 14, 2025
c94dd78
docs(sdk): server
May 14, 2025
3b09f8a
docs(sdk): server
May 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docs-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ jobs:
run: pnpm i

- name: Build with VitePress
run: pnpm build:docs
run: pnpm docs:build

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,6 @@ refs
objects
info
hooks

# server
server/uploads
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,11 @@
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
20 changes: 10 additions & 10 deletions docs/.vitepress/cache/deps/_metadata.json
Original file line number Diff line number Diff line change
@@ -1,43 +1,43 @@
{
"hash": "b2a223ce",
"configHash": "3c801238",
"lockfileHash": "2eb6c3e6",
"browserHash": "5197b7f6",
"hash": "c068ed14",
"configHash": "ca39393b",
"lockfileHash": "64117e8b",
"browserHash": "8a8cc074",
"optimized": {
"vue": {
"src": "../../../../node_modules/.pnpm/vue@3.4.35_typescript@5.5.4/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "b116bb2d",
"fileHash": "c1ba99dc",
"needsInterop": false
},
"vitepress > @vue/devtools-api": {
"src": "../../../../node_modules/.pnpm/@vue+devtools-api@7.3.7/node_modules/@vue/devtools-api/dist/index.js",
"file": "vitepress___@vue_devtools-api.js",
"fileHash": "d624aba5",
"fileHash": "105dd1ac",
"needsInterop": false
},
"vitepress > @vueuse/core": {
"src": "../../../../node_modules/.pnpm/@vueuse+core@10.11.0_vue@3.4.35_typescript@5.5.4_/node_modules/@vueuse/core/index.mjs",
"file": "vitepress___@vueuse_core.js",
"fileHash": "7caa917e",
"fileHash": "ff660189",
"needsInterop": false
},
"vitepress > @vueuse/integrations/useFocusTrap": {
"src": "../../../../node_modules/.pnpm/@vueuse+integrations@10.11.0_focus-trap@7.5.4_vue@3.4.35_typescript@5.5.4_/node_modules/@vueuse/integrations/useFocusTrap.mjs",
"file": "vitepress___@vueuse_integrations_useFocusTrap.js",
"fileHash": "d94660bf",
"fileHash": "60206fc0",
"needsInterop": false
},
"vitepress > mark.js/src/vanilla.js": {
"src": "../../../../node_modules/.pnpm/mark.js@8.11.1/node_modules/mark.js/src/vanilla.js",
"file": "vitepress___mark__js_src_vanilla__js.js",
"fileHash": "d534ef1e",
"fileHash": "7f67ece3",
"needsInterop": false
},
"vitepress > minisearch": {
"src": "../../../../node_modules/.pnpm/minisearch@7.1.0/node_modules/minisearch/dist/es/index.js",
"file": "vitepress___minisearch.js",
"fileHash": "f3681b8a",
"fileHash": "5b665f23",
"needsInterop": false
}
},
Expand Down
3 changes: 1 addition & 2 deletions docs/.vitepress/theme/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ export default {
})
},
enhanceApp({ app, router, siteData }) {
// ...
console.log(app)
// console.log(app)
}
} satisfies Theme
102 changes: 31 additions & 71 deletions docs/sdk/questions.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,88 +7,48 @@ outline: deep

## 模拟接口请求

在仓库 server 目录下有基于`nest.js`模拟的接口
在仓库 server 目录下有基于`NestJS`模拟的接口

1. `upload`接口

```js
@Post('upload')
// file和前端上传的名称保持一致
@UseInterceptors(
FileInterceptor('file', {
dest: 'uploads',
}),
)
uploadFile(@UploadedFile() file: Express.Multer.File, @Body() body) {
const { filename, hash, index } = body;
const chunkDir = `uploads/${hash}_${filename}`;
```bash
# 启动sever
pnpm run server:dev
```

if (!fs.existsSync(chunkDir)) {
fs.mkdirSync(chunkDir);
}
fs.cpSync(file.path, chunkDir + '/' + index);
fs.rmSync(file.path);
1. `check` 接口

return { data: true };
}
```js
axios.get('http://localhost:3000/check', {
params: {
hash: 'xxxx-xxxx-xxxx',
filename: 'xxx.png',
status: 'none' // none, part, waitMerge, success
},
})
```

2. `merge`接口
2. `upload`接口

```js
@Post('merge')
merge(@Body() body) {
const { hash, name: filename } = body;
const chunkDir = `uploads/${hash}_${filename}`;
const files = fs.readdirSync(chunkDir);
const data = {
hash: 'xxxx-xxxx-xxxx',
filename: 'xxx.png',
index: 2,
file: (blob)
}
const formData = new FormData()
Object.entries(data).forEach(([key, value]) => formData.append(key, value))

let startPos = 0;
files.map((file) => {
const filePath = chunkDir + '/' + file;
const stream = fs.createReadStream(filePath);
stream.pipe(
fs.createWriteStream('uploads/' + filename, {
start: startPos,
}),
);
axios.post('http://localhost:3000/upload', { data: formData })

startPos += fs.statSync(filePath).size;
});

return {
data: `http://localhost:3000/static/${filename}`,
};
}
```

3. `checkFile`接口
2. `merge`接口

```js
@Post('checkFile')
checkFile(@Body() body) {
const { status } = body;
if (status === 'success') {
return {
status: 'success',
data: 'https://baidu.com',
};
}

if (status === 'part') {
return {
status: 'part',
// 成功的索引
data: [0, 2, 4, 6, 8, 10],
};
}

if (status === 'none') {
return {
status: 'none',
data: false,
};
}
}
axios.get('http://localhost:3000/merge', {
params: {
hash: 'xxxx-xxxx-xxxx',
filename: 'xxx.png',
},
})
```

clone 代码到本地,启动 server 在`3000`端口
21 changes: 14 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,38 @@
"workspaces": [
"packages/*"
],
"description": "",
"description": "大文件分片上传解决方案",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"sdk:dev": "pnpm -F @tinyuploader/sdk dev",
"sdk:build": "pnpm -F @tinyuploader/sdk run build",
"sdk:preview": "pnpm -F @tinyuploader/sdk run preview",
"build": "pnpm run --parallel --filter @tinyuploader/* build",
"dev:sdk": "pnpm -F @tinyuploader/sdk run dev:play",
"build:sdk": "pnpm -F @tinyuploader/sdk run build",
"dev:package-vue": "pnpm -F @tinyuploader/vue dev:play",
"build:package-vue": "pnpm -F @tinyuploader/vue run build",
"dev:package-vuenext": "pnpm -F @tinyuploader/vuenext run dev:play",
"build:package-vuenext": "pnpm -F @tinyuploader/vuenext run build",
"build:docs": "pnpm run -C docs docs:build",
"docs:dev": "pnpm run -C docs docs:dev",
"docs:build": "pnpm run -C docs docs:build",
"docs:preview": "pnpm run -C docs docs:preview",
"dev:vue": "pnpm -F @demos/vue run dev",
"dev:vuenext": "pnpm -F @demos/vuenext run dev",
"play:vue": "npm-run-all -p dev:sdk dev:package-vue dev:vue",
"play:vuenext": "npm-run-all -p dev:sdk dev:package-vuenext dev:vuenext",
"dev:server": "pnpm run -C server start:debug",
"server:dev": "pnpm run -C server start:debug",
"change": "pnpm changeset",
"change-version": "pnpm changeset version",
"publish": "pnpm install && pnpm build && pnpm publish -F @tinyuploader/* ",
"clear": "rimraf node_modules & rimraf packages/**/node_modules & rimraf demos/**/node_modules & rimraf docs/node_modules & rimraf server/node_modules"
"clean": "pnpm -r exec rimraf node_modules --verbose && npx rimraf node_modules --verbose"
},
"keywords": [
"uploader",
"upload",
"file",
"big file",
"retry",
"pause",
"resume",
"上传",
"分片上传",
"大文件",
Expand Down
43 changes: 0 additions & 43 deletions packages/sdk/example/index.html

This file was deleted.

Loading
Loading