koaアップロードファイルの簡単な処理(アップロード、受信、保存)

フロントエンドファイルのアップロード(2種類)

(1)要素UIコンポーネント

<el-upload 
	class="avatar-uploader" 
	action="/api/image/upload" 
	multiple
	:show-file-list="true"
	:on-success="handleAvatarSuccess"
	:before-upload="beforeAvatarUpload">
		<img v-if="form.imageUrl" :src="form.imageUrl" class="avatar">
		<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

注:アクションセクションでは、/ apiはクロスドメインの状況を解決するためのプロキシであり、次の表現を使用することもできます

//html 部分
<el-upload
	class="avatar-uploader" 
	:http-request="fileChange"
	multiple
	:show-file-list="true"
	:on-success="handleAvatarSuccess"
	:before-upload="beforeAvatarUpload">
	<img v-if="form.imageUrl" :src="form.imageUrl" class="avatar">
	<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
//js
fileChange(files) {
    
    
	console.log(files.file)
	let form = new FormData();
	form.append('file', files.file);
	//该方法为axios封装方法				
	imageUpload(form).then(res => {
    
    

	})				
}
//axios封装方法详细部分
import request from '../utills/axios.js'

export function imageUpload(file) {
    
    
  return request({
    
      	
    url: '/image/upload',
    headers: {
    
    'Content-Type': 'multipart/form-data'},
    method: 'post',
    data:file
  })
}

(2)ネイティブ

//html 部分
<input type="file" multiple="multiple" @change="fileChange" placeholder="上传文件">
//js
fileChange() {
    
    
				
				let fileList = event.target.files;			
				let file = fileList[0];
				let form = new FormData();
				form.append('file',file);				
				//你的post接口,formData方式发送
				imageUpload(form).then(res => {
    
    

				})
				
			}

バックエンドファイルの構成

app.jsファイルに追加します


const koaBody = require('koa-body');

app.use(koaBody({
    
    
	multipart: true,
	formidable: {
    
    
		//上传文件存储目录
		uploadDir:  path.join(__dirname, `/public/uploads/`),
		//允许保留后缀名
		keepExtensions: true,
		multipart: true,
	}
  })
)

ルーティングファイルセクション

router.post('/upload', async (ctx, next) => {
    
    
	var str=ctx.request.files.file.path
	var pathArr=str.split("\\uploads\\")
	var basicUrl="http://localhost:3001/" //为基础路径
	console.log(pathArr)
	ctx.body = {
    
    
		// filename: ctx.request.files.file,
		path:basicUrl+'uploads/'+pathArr[1]
	}
})

インターネットで情報を検索すると、処理に使用される画像ファイルのほとんどがコアマルターです。
これも設定しようとしましたが、常に機能しません。まだピット内にあります。具体的な設定は次のとおり
です。新しいものを作成します。 utilsディレクトリにupload.jsをファイルします。

const multer = require('koa-multer')

//配置
var storage = multer.diskStorage({
    
    
	
    destination: function (req, file, cb) {
    
    
        cb(null, 'public/uploads'); //配置图片上传的目录
    },
	filename: function (ctx,file,cb) {
    
    
		console.log('修改文件名')
		const filenameArr = file.originalname.split('.');
		cb(null,Date.now() + '.' + filenameArr[filenameArr.length-1]);
	}
})
console.log(storage)
//加载配置
var upload = multer({
    
    storage})

module.exports = upload

ルーティングで使用

const koaRouter = require('koa-router');
const upload = require('../utils/upload')

router.post('/upload', upload.single('file'), async (ctx, next) => {
    
    
ctx.body = {
    
    
	filename: ctx.request.files.file,
} 
 })

app.jsファイルに追加します


const koaBody = require('koa-body');

app.use(koaBody({
    
    
	multipart: true,	
  })
)

実行後、アップロードは成功し、戻り値はありますが、ファイルはローカルディレクトリに保存されず、upload.jsパスは正しくインポートされますが、変更されたファイルの名前は印刷後に印刷できません。ようこそ友達それを知っている人。

おすすめ

転載: blog.csdn.net/qq_40969782/article/details/113998084