【发布时间】:2018-09-30 19:41:51
【问题描述】:
在我的前端中,我使用 angular6,我有这个表单,您可以通过将文件放入 div 或单击 div 打开文件选择器来选择图像。
表格是
<form [formGroup]="imageUpload" (ngSubmit)="imageUploadSubmitted($event.target)" >
<div id="imageDrop" (click)='imageInput.click()' (drop)="drop($event)" (dragover)="allowDrop($event)" #imageDrop></div>
<input type="file" (change)='imageChange($event)' #imageInput id="imageInput" name = 'imageInput' accept=".png, .jpg, .jpeg, .gif" formControlName="imageInput" required >
<button type="submit" >Submit</button>
</form>
这是打字稿
selectedFile:File=null;
allowDrop(e) {
e.preventDefault();
}
drop(e) {
e.preventDefault();
this.imageUpload.controls.imageInput.reset();
this.selectedFile = e.dataTransfer.files[0];
let input = this.imageUpload.controls.imageInput as any;
input.value = e.dataTransfer.files[0];
}
imageChange(e){
this.selectedFile = e.target.files[0];
}
因此,当删除图像时,从事件中获取它并将其放入文件输入中。提交表单后,将表单数据发送到服务以进行发布。 console.log 显示一个文件对象 (__proto__ : File),无论您是从文件选择器中选择图像,还是将图像放入 div。
imageUploadSubmitted(form){
console.log('imageInput value - ', this.imageUpload.controls.imageInput.value);
this.mapcmsService.uploadImage(form).subscribe((data) =>{
if(data.success){ alert('all good'); }
else{ alert('error'); }
})
}
该服务抓取表单控件并构建一个FormData 对象以发送到节点。
uploadImage(data){
let formData = new FormData(data);
let headers = new Headers();
headers.append('Authorization',this.userToken);
return this.http.post('http://localhost:3000/user/upload/image', formData ,{headers:headers} ).pipe(map(res => res.json()));
}
在节点中,我使用强大的来获取文件并保存它。这是为了测试。
var form = new formidable.IncomingForm();
form.parse(req);
form.on('file', function (name, file){
console.log('file' , file);
});
问题是,如果我通过文件选择器选择了一个图像,我会得到一个 image/jpeg 类型的文件、一个名称、一个路径和一个大小。
如果我通过拖放选择图像,我会得到一个application/octet-stream 类型的文件。这个文件没有名称,也没有大小。
我想在这两种情况下都得到image/jpeg。我很困惑,这是节点问题还是角度问题?我怎样才能解决这个问题 ?
谢谢
棱角6,节点8.11.1,强大1.2.1
【问题讨论】:
-
你能在像 Codepen 这样的代码操场上隔离这个(仅限客户端部分)吗? codepen.io/anon/pen/zJgVea(这是一个角模板)
-
(drop)="drop($event)"功能的动力是什么?什么代码实现了drop指令?
标签: node.js angular file-upload formidable