feat: added base64 file stream download

This commit is contained in:
vben 2020-11-15 13:22:34 +08:00
parent 78d4d41c85
commit a161bfa818
9 changed files with 106 additions and 54 deletions

View File

@ -1,3 +1,9 @@
## Wip
### ✨ Features
- 新增 base64 文件流下载
## 2.0.0-rc.10 (2020-11-13) ## 2.0.0-rc.10 (2020-11-13)
### ✨ Refactor ### ✨ Refactor

View File

@ -49,56 +49,10 @@
} }
} }
// collapsed show title end
.ant-menu-item,
.ant-menu-submenu-title {
> .basic-menu__name {
width: 100%;
.basic-menu__tag {
float: right;
margin-top: @app-menu-item-height / 2;
transform: translate(0%, -50%);
}
}
}
.ant-menu-item { .ant-menu-item {
transition: unset; transition: unset;
} }
&__tag {
display: inline-block;
padding: 2px 4px;
margin-right: 4px;
font-size: 12px;
line-height: 14px;
color: #fff;
border-radius: 2px;
&.dot {
width: 8px;
height: 8px;
padding: 0;
border-radius: 50%;
}
&.primary {
background: @primary-color;
}
&.error {
background: @error-color;
}
&.success {
background: @success-color;
}
&.warn {
background: @warning-color;
}
}
// scrollbar -s tart // scrollbar -s tart
&__content { &__content {
/* 滚动槽 */ /* 滚动槽 */
@ -245,6 +199,11 @@
margin: 0; margin: 0;
line-height: @app-menu-item-height; line-height: @app-menu-item-height;
} }
.ant-menu-item.basic-menu-item__level1 {
height: @app-menu-item-height;
line-height: @app-menu-item-height;
}
} }
// 层级样式 // 层级样式
@ -381,3 +340,51 @@
} }
} }
} }
// collapsed show title end
.ant-menu-item,
.ant-menu-submenu-title {
> .basic-menu__name {
width: 100%;
.basic-menu__tag {
float: right;
margin-top: @app-menu-item-height / 2;
transform: translate(0%, -50%);
}
}
}
.basic-menu__tag {
display: inline-block;
padding: 2px 4px;
margin-right: 4px;
font-size: 12px;
line-height: 14px;
color: #fff;
border-radius: 2px;
&.dot {
width: 8px;
height: 8px;
padding: 0;
margin-top: 21px !important;
margin-bottom: 2px;
border-radius: 50%;
}
&.primary {
background: @primary-color;
}
&.error {
background: @error-color;
}
&.success {
background: @success-color;
}
&.warn {
background: @warning-color;
}
}

View File

@ -6,7 +6,7 @@
@multiple-height: 30px; @multiple-height: 30px;
// headers // headers
@header-height: 46px; @header-height: 48px;
// logo width // logo width
@logo-width: 36px; @logo-width: 36px;

View File

@ -93,5 +93,13 @@
opacity: 1; opacity: 1;
}); });
} }
// &.dark .logo-title {
// font-weight: 400;
// }
&.light .logo-title {
color: @primary-color;
}
} }
</style> </style>

View File

@ -8,7 +8,7 @@ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [
'#409eff', '#409eff',
'#4e73df', '#4e73df',
'#e74c3c', '#e74c3c',
'#f39c12', '#24292e',
'#394664', '#394664',
'#001529', '#001529',
]; ];
@ -17,6 +17,7 @@ export const HEADER_PRESET_BG_COLOR_LIST: string[] = [
export const SIDE_BAR_BG_COLOR_LIST: string[] = [ export const SIDE_BAR_BG_COLOR_LIST: string[] = [
'#273352', '#273352',
'#ffffff', '#ffffff',
'#191a23',
'#001529', '#001529',
'#304156', '#304156',
'#28333E', '#28333E',

View File

@ -1,5 +1,12 @@
import { dataURLtoBlob } from './stream';
export function downloadByBase64(buf: string, filename: string, mime?: string, bom?: BlobPart) {
const base64Buf = dataURLtoBlob(buf);
downloadByData(base64Buf, filename, mime, bom);
}
/** /**
* * Download according to the background interface file stream
* @param {*} data * @param {*} data
* @param {*} filename * @param {*} filename
* @param {*} mime * @param {*} mime
@ -27,7 +34,7 @@ export function downloadByData(data: BlobPart, filename: string, mime?: string,
} }
/** /**
* * Download file according to file address
* @param {*} sUrl * @param {*} sUrl
*/ */
export function downloadByUrl({ export function downloadByUrl({
@ -43,7 +50,7 @@ export function downloadByUrl({
const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1; const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1;
if (/(iP)/g.test(window.navigator.userAgent)) { if (/(iP)/g.test(window.navigator.userAgent)) {
console.error('您的浏览器不支持下载!'); console.error('Your browser does not support download!');
return false; return false;
} }
if (isChrome || isSafari) { if (isChrome || isSafari) {

15
src/utils/file/stream.ts Normal file
View File

@ -0,0 +1,15 @@
/**
* @description: base64 to blob
*/
export function dataURLtoBlob(base64Buf: string): Blob {
const arr = base64Buf.split(',');
const typeItem = arr[0];
const mime = typeItem.match(/:(.*?);/)![1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}

File diff suppressed because one or more lines are too long

View File

@ -4,14 +4,16 @@
<a-button type="primary" class="my-4" @click="handleDownByData"> 文件流下载 </a-button> <a-button type="primary" class="my-4" @click="handleDownByData"> 文件流下载 </a-button>
<a-alert message="根据文件地址下载文件" /> <a-alert message="根据文件地址下载文件" />
<a-button type="primary" class="my-4" @click="handleDownloadByUrl"> 文件地址下载 </a-button> <a-button type="primary" class="my-4" @click="handleDownloadByUrl"> 文件地址下载 </a-button>
<a-alert message="base64流下载" />
<a-button type="primary" class="my-4" @click="handleDownloadByBase64"> base64流下载 </a-button>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import { downloadByUrl, downloadByData } from '/@/utils/file/FileDownload'; import { downloadByUrl, downloadByData, downloadByBase64 } from '/@/utils/file/FileDownload';
import imgBase64 from './imgBase64';
export default defineComponent({ export default defineComponent({
setup() { setup() {
function handleDownByData() { function handleDownByData() {
@ -23,9 +25,14 @@
target: '_self', target: '_self',
}); });
} }
function handleDownloadByBase64() {
downloadByBase64(imgBase64, 'logo.png');
}
return { return {
handleDownloadByUrl, handleDownloadByUrl,
handleDownByData, handleDownByData,
handleDownloadByBase64,
}; };
}, },
}); });