这个问题网上有很多,但是很多都是水.
这里我记录下我的实现方式!
node 服务端
import formidable from 'formidable'
/**
* 图片
*/
router.post('/api/user/addItem', (req, res) => {
// 增加数据
// 获取客户端传过来的商品信息
const form = new formidable.IncomingForm();
form.uploadDir = config.uploadsGoodsPath; // 上传图片放置的文件夹
form.keepExtensions = true; // 保持文件的原始扩展名
form.parse(req, (err, fields, files)=>{
if(err){
return next(err);
}
console.log(fields)
let title = fields.title;
let link = fields.link;
let arr = JSON.parse(fields.arrs_num);
console.log(arr.length,11111111)
let picUrl=[]
for(let i =0;i<arr.length;i++){
console.log(i,'aaaaaaaa')
picUrl.push('http://localhost:' + config.port + '/uploads/' + basename(files[`product_img_${i}`].path))
}
// let picUrl = 'http://localhost:' + config.port + '/uploads/' + basename(files['product_img_0'].path);
console.log(picUrl)
});
});
前端
html部分就 不放了elementUI 里面的upload组件
<el-upload
action="#"
list-type="picture-card"
:auto-upload="false"
:limit="5"
:on-change="handleChange"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{file}">
<img
class="el-upload-list__item-thumbnail"
:src="file.url" alt=""
>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="handlePictureCardPreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!disabled"
class="el-upload-list__item-delete"
@click="handleDownload(file)"
>
<i class="el-icon-download"></i>
</span>
<span
v-if="!disabled"
class="el-upload-list__item-delete"
@click="handleRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
</el-upload>
createData() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id
this.temp.author = 'vue-element-admin'
this.temp.images=this.fileList.length>0?this.fileList:''
console.log(this.fileList[0].raw)
if(!this.temp.images){
this.$message({
message: '图片没传',
type: 'error'
})
return false
}
let formData = new FormData();
let arrs_num = []
for(let i = 0;i<this.fileList.length;i++){
formData.append('product_img_'+i, this.fileList[i].raw);
arrs_num.push(0)
}
console.log(arrs_num)
formData.append('title', this.temp.title);
formData.append('arrs_num', JSON.stringify(arrs_num));
formData.append('link', this.temp.link);
addItems(formData).then((res) => {
this.dialogFormVisible = false
this.getList()
})
}
})
},
handleChange(file, fileList) {
console.log(file);
console.log(fileList);
this.fileList = fileList;
},