【发布时间】:2020-02-18 09:33:25
【问题描述】:
我在 Angular 8 中有一个反应式表单。在提交表单时,我需要将值与上传的文件一起发布到 API。但我不太确定如何将文件与值一起发布。
<form [formGroup]="detailsForm" (ngSubmit)="onSubmit()">
<div>
<label for="desc">Description</label>
<input type="text" id="desc" formControlName="desc"/>
</div>
<div>
<label for="summary">Summary</label>
<textarea id="summary" formControlName="summary"></textarea>
</div>
<div formGroupName="contact">
<div>
<label for="name">Name</label>
<input type="text" id="name" required formControlName="name"/>
</div>
<div>
<label for="email">Email</label>
<input type="email" id="email" formControlName="email"/>
</div>
</div>
<div>
<label for="file">Upload File</label>
<input type="file" id="file" formControlName="file">
</div>
<button type="submit">Submit</button>
</form>
在组件中
constructor(public httpService: HttpRequestService) { }
onSubmit() {
this.httpService.postData(this.detailsForm.value).then(
(result) => {
this.jsonResponse = result;
},
(err) => {
this.errorResponse = 'Sorry, there was an error processing your request!';
}
)
}
服务中
postData(detailsData) {
const headers = new HttpHeaders(
{ 'Content-Type': 'multipart/form-data' }
);
return new Promise((resolve, reject) =>{
this.http.post('http://localhost:3000/postData', detailsData, { headers: headers })
.subscribe(res => resolve(res), err => reject(err))
});
}
在后端,仅用于测试目的
const express = require("express");
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.use(cors());
// Configuring body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.listen(3000, () => {
console.log("Server running on port 3000");
});
app.post("/postData", (req,res) => {
console.log(req.body);
});
所有值都被记录下来,但对于文件,我只获取路径值。如何获取文件的内容(我需要上传和发送 Excel 文件)。
【问题讨论】:
-
multer 是后端用于文件上传功能的包。看看code.tutsplus.com/tutorials/…
标签: angular