这里什么原因

来源:9-12 实现上传文件业务

qq_蓝骏毅_04076633

2021-04-14

events.js:288
      throw er; // Unhandled 'error' event
      ^

Error: ENOENT: no such file or directory, open 'C:\Users\pc\Desktop\projects\book-mgr\book-mgr-be\upload\test.xlsx'
Emitted 'error' event on WriteStream instance at:
    at errorOrDestroy (internal/streams/destroy.js:108:12)
    at WriteStream.onerror (_stream_readable.js:746:7)
    at WriteStream.emit (events.js:311:20)
    at internal/fs/streams.js:320:12
    at FSReqCallback.oncomplete (fs.js:154:23) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\Users\\pc\\Desktop\\projects\\book-mgr\\book-mgr-be\\upload\\test.xlsx'
}
const fs = require('fs');

const saveFileToDisk = (ctx, filename) => {
  return new Promise((resolve, reject) => {
	// 获取上传文件
    const file = ctx.request.files.file;
	//创建可读流
    const reader = fs.createReadStream(file.path);
	//创建可写流
    const writeStream = fs.createWriteStream(filename);
	//读流通过管道写入可写流
    reader.pipe(writeStream);

    reader.on('end', () => {
      resolve(filename);
    });

    reader.on('error', (err) => {
      reject(err);
    });
  });
};

const getUploadFileExt = (ctx) => {
  const { name = '' } = ctx.request.files.file;

  return name.split('.').pop();
};

module.exports = {
  saveFileToDisk,
  getUploadFileExt,
};
const Router = require('@koa/router');

const mongoose = require('mongoose');

const { v4: uuidv4 } = require('uuid');

const config = require('../../project.config');

const { verify , getToken } = require('../../helpers/token');

const {saveFileToDisk} = require('../../helpers/upload');


const path = require('path')

//const { getBody } = require('../../helpers/utils');

const User = mongoose.model('User');

const Character = mongoose.model('Character');

const router = new Router({
	prefix: '/upload',
});

router.post('/file', async (ctx) => {
	const dir = await saveFileToDisk(ctx , path.resolve(config.UPLOAD_DIR,'test.xlsx'));
	
	ctx.body = {
	    data: dir,
	    msg: '',
	    code: 1,
	  };
	
});

module.exports = router;


写回答

1回答

然冬

2021-04-15

看异常是没找到文件。

具体的逻辑我先不过了,告诉你调试方法。

  1. 把上传目录的文件都删掉

  2. 跑上传接口

  3. 跑完看下文件有没有

  4. 如果有 则说明文件是存在的,这时候就要比对文件名

  5. 如果没有 说明上传就失败了 检测相关逻辑

0
1
qq_蓝骏毅_04076633
好像没有在创建upload目录
2021-04-15
共1条回复

毕设一课通 高效完成毕业设计(选题/毕设/论文/答辩)

为计算机专业大学生解决“毕业难题”

344 学习 · 606 问题

查看课程