// 文件上传 async upload() { const ctx = this.ctx; const stream = await ctx.getFileStream(); let url try { const fileName = process.version + '-' + Date.now() + '-' + stream.filename const filepath = path.join(ctx.app.config.static.dir, 'upload/' + fileName) await saveStream(stream, filepath) url = 'upload/' + fileName } catch (err) { await sendToWormhole(stream) throw err } ctx.body = { url: url } }
// 修改头像 async resetAvatar() { const { ctx, service } = this const stream = await ctx.getFileStream() const filename = path.basename(stream.filename) const extname = path.extname(stream.filename).toLowerCase() const attachment = new this.ctx.model.Attachment attachment.extname = extname attachment.filename = filename attachment.url = `/uploads/avatar/${attachment._id.toString()}${extname}` const target = path.join(this.config.baseDir, 'app/public/uploads/avatar', `${attachment._id.toString()}${attachment.extname}`) const writeStream = fs.createWriteStream(target) try { await awaitWriteStream(stream.pipe(writeStream)) // 调用 Service 进行业务处理 await service.userAccess.resetAvatar(attachment) } catch (err) { await sendToWormhole(stream) throw err } // 设置响应内容和响应状态码 ctx.helper.success({ctx}) }
const filename = stream.filename; const fileNameArr = filename.split('.'); let childrenUrl = '/publicData/uploads/';
async upload() { const { ctx, service } = this; const stream = await ctx.getFileStream(); const name = getFileName(stream.filename); let result; const failRes = {
// 修改单个文件 async update() { const { ctx, service } = this // 组装参数 const { id } = ctx.params // 传入要修改的文档ID // 调用Service 删除旧文件,如果存在 const attachment = await service.upload.updatePre(id) // 获取用户上传的替换文件 const stream = await ctx.getFileStream() const extname = path.extname(stream.filename).toLowerCase() // 文件扩展名称 const filename = path.basename(stream.filename) // 文件名称 // 组装更新参数 attachment.extname = extname attachment.filename = filename attachment.url = `/uploads/${attachment._id.toString()}${extname}` const target_U = path.join(this.config.baseDir, 'app/public/uploads', `${attachment._id}${extname}`) const writeStream = fs.createWriteStream(target_U) // 文件处理,上传到云存储等等 try { await awaitWriteStream(stream.pipe(writeStream)) } catch (err) { // 必须将上传的文件流消费掉,要不然浏览器响应会卡死 await sendToWormhole(stream) throw err } // 调用Service 保持原图片ID不变,更新其他属性 await service.upload.update(id, attachment) // 设置响应内容和响应状态码 ctx.helper.success({ctx}) }
async upload() { const { ctx } = this; const stream = await ctx.getFileStream(); const name = getFileName(stream.filename); let result; const failRes = {
const { ctx } = this; const stream = await ctx.getFileStream(); const name = getFileName(stream.filename); let result;
const { ctx } = this; const stream = await ctx.getFileStream(); const name = getFileName(stream.filename); let result;