file.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import axios from 'axios';
  2. export async function upload(
  3. blob: Blob,
  4. shared = false,
  5. filename = 'thumb.png',
  6. directory = '/2D/缩略图'
  7. ) {
  8. const form = new FormData();
  9. form.append('filename', filename);
  10. form.append('directory', directory);
  11. form.append('public', shared + '');
  12. form.append('file', blob);
  13. const ret: any = await axios.post('/api/image/upload', form);
  14. if (!ret) {
  15. return;
  16. }
  17. return ret;
  18. }
  19. export async function delImage(image: string) {
  20. const ret: any = await axios.delete('/api' + image);
  21. if (ret.error) {
  22. return false;
  23. }
  24. return true;
  25. }
  26. export async function addImage(image: string) {
  27. const ret: any = await axios.post('/api/user/image', { image });
  28. if (ret.error) {
  29. return '';
  30. }
  31. return ret.id;
  32. }
  33. export function filename(str: string) {
  34. const i = str.lastIndexOf('.');
  35. return str.substring(0, i);
  36. }
  37. const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
  38. export function formatBytes(size: number) {
  39. let l = 0;
  40. let n = size / 1024;
  41. while (n >= 1024 && ++l) {
  42. n = n / 1024;
  43. }
  44. return Math.round(n * 100) / 100 + ' ' + units[l];
  45. }
  46. /**
  47. * 读取文件内容,返回字符串
  48. * @param file 文件
  49. */
  50. export async function readFile(file: Blob) {
  51. return new Promise<string>((resolve, reject) => {
  52. const reader = new FileReader();
  53. reader.onload = () => {
  54. resolve(reader.result as string);
  55. };
  56. reader.onerror = reject;
  57. // readAsText 使 result 一定是字符串
  58. reader.readAsText(file);
  59. });
  60. }
  61. export function dataURLtoBlob(base64: string) {
  62. let arr: any = base64.split(','),
  63. mime = arr[0].match(/:(.*?);/)[1],
  64. bstr = atob(arr[1]),
  65. n = bstr.length,
  66. u8arr = new Uint8Array(n);
  67. while (n--) {
  68. u8arr[n] = bstr.charCodeAt(n);
  69. }
  70. return new Blob([u8arr], { type: mime });
  71. }
  72. /**
  73. * 图片转 Blob
  74. * @param img 图片
  75. */
  76. export function saveToBlob(img: HTMLImageElement): Blob {
  77. const canvas: HTMLCanvasElement = document.createElement('canvas');
  78. canvas.setAttribute('origin-clean', 'false');
  79. canvas.width = img.width;
  80. canvas.height = img.height;
  81. const context: any = canvas.getContext('2d');
  82. context.filter = window.getComputedStyle(img).filter;
  83. context.drawImage(img, 0, 0, canvas.width, canvas.height);
  84. return dataURLtoBlob(canvas.toDataURL());
  85. }