@@ -4,25 +4,44 @@ module.exports = async function read({ query }) {
44 const { path } = query ;
55
66 if ( ! path ) {
7- return { code : 400 , msg : "缺少文件路径参数" } ;
7+ return { code : 400 , msg : "缺少文件路径参数" , data : query } ;
88 }
99
10- if ( ! fs . existsSync ( path ) ) {
11- return { code : 404 , msg : "文件不存在" } ;
12- }
10+ try {
11+ if ( ! fs . existsSync ( path ) ) {
12+ return { code : 404 , msg : "文件不存在" , data : query } ;
13+ }
1314
14- const stat = fs . statSync ( path ) ;
15- if ( ! stat . isFile ( ) ) {
16- return { code : 400 , msg : "路径不是文件" } ;
17- }
15+ const stat = fs . statSync ( path ) ;
16+ if ( ! stat . isFile ( ) ) {
17+ return { code : 400 , msg : "路径不是文件" , data : query } ;
18+ }
19+
20+ const testFd = fs . openSync ( path , "r" ) ;
21+ fs . closeSync ( testFd ) ;
22+
23+ return {
24+ code : 200 ,
25+ msg : "操作成功" ,
26+ data : {
27+ size : stat . size ,
28+ filename : path . split ( "/" ) . pop ( ) ,
29+ stream : fs . createReadStream ( path ) ,
30+ } ,
31+ } ;
32+ } catch ( error ) {
33+ if ( error . code === "EACCES" || error . code === "EPERM" ) {
34+ return { code : 403 , msg : "权限不足,无法读取文件" , data : query } ;
35+ }
1836
19- return {
20- code : 200 ,
21- msg : "操作成功" ,
22- data : {
23- size : stat . size ,
24- filename : path . split ( "/" ) . pop ( ) ,
25- stream : fs . createReadStream ( path ) ,
26- } ,
27- } ;
37+ if ( error . code === "ENOENT" ) {
38+ return { code : 404 , msg : "文件不存在" , data : query } ;
39+ }
40+
41+ if ( error . code === "EISDIR" ) {
42+ return { code : 400 , msg : "路径是目录而不是文件" , data : query } ;
43+ }
44+
45+ return { code : 500 , msg : `读取文件失败: ${ error . message } ` , data : query } ;
46+ }
2847} ;
0 commit comments