@@ -10,23 +10,23 @@ import {
1010} from "@App/app/repo/resource" ;
1111import { ResourceLinkDAO } from "@App/app/repo/resource_link" ;
1212import { Script } from "@App/app/repo/scripts" ;
13- import axios from "axios" ;
1413import Cache from "@App/app/cache" ;
1514import { blobToBase64 } from "@App/pkg/utils/utils" ;
1615import CacheKey from "@App/pkg/utils/cache_key" ;
1716import { isText } from "@App/pkg/utils/istextorbinary" ;
1817import Manager from "../manager" ;
1918import { calculateHashFromArrayBuffer } from "@App/pkg/utils/crypto" ;
2019import { base64ToHex , isBase64 } from "./utils" ;
20+ import { blobToUint8Array } from "@App/pkg/utils/datatype" ;
2121
2222// 资源管理器,负责资源的更新获取等操作
2323
2424function calculateHash ( blob : Blob ) : Promise < ResourceHash > {
2525 return new Promise ( ( resolve ) => {
2626 const reader = new FileReader ( ) ;
2727 reader . readAsArrayBuffer ( blob ) ;
28- reader . onloadend = ( ) => {
29- if ( ! reader . result ) {
28+ reader . onloadend = function ( ) {
29+ if ( ! this . result ) {
3030 resolve ( {
3131 md5 : "" ,
3232 sha1 : "" ,
@@ -35,7 +35,7 @@ function calculateHash(blob: Blob): Promise<ResourceHash> {
3535 sha512 : "" ,
3636 } ) ;
3737 } else {
38- resolve ( calculateHashFromArrayBuffer ( < ArrayBuffer > reader . result ) ) ;
38+ resolve ( calculateHashFromArrayBuffer ( < ArrayBuffer > this . result ) ) ;
3939 }
4040 } ;
4141 } ) ;
@@ -366,41 +366,34 @@ export class ResourceManager extends Manager {
366366 return Promise . resolve ( undefined ) ;
367367 }
368368
369- loadByUrl ( url : string , type : ResourceType ) : Promise < Resource > {
370- return new Promise ( ( resolve , reject ) => {
371- const u = this . parseUrl ( url ) ;
372- axios
373- . get ( u . url , {
374- responseType : "blob" ,
375- } )
376- . then ( async ( response ) => {
377- if ( response . status !== 200 ) {
378- return reject (
379- new Error ( `resource response status not 200:${ response . status } ` )
380- ) ;
381- }
382- const resource : Resource = {
383- id : 0 ,
384- url : u . url ,
385- content : "" ,
386- contentType : (
387- response . headers [ "content-type" ] || "application/octet-stream"
388- ) . split ( ";" ) [ 0 ] ,
389- hash : await calculateHash ( < Blob > response . data ) ,
390- base64 : "" ,
391- type,
392- createtime : new Date ( ) . getTime ( ) ,
393- } ;
394- const arrayBuffer = await ( < Blob > response . data ) . arrayBuffer ( ) ;
395- const uint8Array = new Uint8Array ( arrayBuffer ) ;
396- if ( isText ( uint8Array ) ) {
397- resource . content = await ( < Blob > response . data ) . text ( ) ;
398- }
399- resource . base64 = ( await blobToBase64 ( < Blob > response . data ) ) || "" ;
400- return resolve ( resource ) ;
401- } )
402- . catch ( ( e ) => reject ( e ) ) ;
403- } ) ;
369+ async loadByUrl ( url : string , type : ResourceType ) : Promise < Resource > {
370+ const u = this . parseUrl ( url ) ;
371+ const resp = await fetch ( u . url ) ;
372+ if ( resp . status !== 200 ) {
373+ throw new Error ( `resource response status not 200: ${ resp . status } ` ) ;
374+ }
375+ const data = await resp . blob ( ) ;
376+ const [ hash , uint8Array , base64 ] = await Promise . all ( [
377+ calculateHash ( data ) ,
378+ blobToUint8Array ( data ) ,
379+ blobToBase64 ( data ) ,
380+ ] ) ;
381+ const contentType = resp . headers . get ( "content-type" ) ;
382+ const resource : Resource = {
383+ id : 0 ,
384+ url : u . url ,
385+ content : "" ,
386+ contentType : ( contentType || "application/octet-stream" ) . split ( ";" ) [ 0 ] ,
387+ hash : hash ,
388+ base64 : "" ,
389+ type,
390+ createtime : Date . now ( ) ,
391+ } ;
392+ if ( isText ( uint8Array ) ) {
393+ resource . content = await data . text ( ) ;
394+ }
395+ resource . base64 = base64 || "" ;
396+ return resource ;
404397 }
405398
406399 parseUrl ( url : string ) : {
0 commit comments