В своем интерфейсе я использую 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
показывает объект File (__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