Jestem początkującym w Angular, chcę wiedzieć, jak utworzyć część do przesyłania plików Angular 5 , próbuję znaleźć tutorial lub dokument, ale nigdzie nie widzę. Masz na to jakiś pomysł? Próbowałem plików ng4, ale to nie działa w Angular 5
angular
typescript
rdzeń 114
źródło
źródło
Choose File
przesyłania BTN? Bdw w obu przypadkach po prostu przesyłasz za pomocą FormDataOdpowiedzi:
Oto działający przykład przesyłania plików do interfejsu API:
Krok 1: Szablon HTML (file-upload.component.html)
Zdefiniuj prosty znacznik wejściowy typu
file
. Dodaj funkcję do(change)
-event do obsługi wybierania plików.Krok 2: Przesyłanie obsługi w TypeScript (file-upload.component.ts)
Zdefiniuj zmienną domyślną dla wybranego pliku.
Utwórz funkcję, której używasz w
(change)
-event tagu wejściowego pliku:Jeśli chcesz obsłużyć wybór wielu plików, możesz iterować po tej tablicy plików.
Teraz utwórz funkcję przesyłania plików, dzwoniąc do Ciebie file-upload.service:
Krok 3: Usługa przesyłania plików (file-upload.service.ts)
Przesyłając plik metodą POST, powinieneś użyć
FormData
, ponieważ możesz dodać plik do żądania HTTP.Jest to więc bardzo prosty przykład roboczy, którego używam na co dzień w swojej pracy.
źródło
const invFormData: FormData = new FormData(); invFormData.append('invoiceAttachment', invoiceAttachment, invoiceAttachment.name); invFormData.append('invoiceInfo', JSON.stringify(invoiceInfo));
Kontroler ma dwa odpowiednie parametry, ale musiałem przeanalizować JSON w kontrolerze. Mój kontroler Core 2 nie automatycznie pobierał modelu z parametru. Mój oryginalny projekt był modelem z właściwością pliku, ale nie mogłem go uruchomićcreateContrat(fileToUpload: File, newContrat: Contrat): Observable<boolean> { let headers = new Headers(); const endpoint = Api.getUrl(Api.URLS.createContrat)); const formData: FormData =new FormData(); formData.append('fileKey', fileToUpload, FileToUpload.name); let body newContrat.gup(this.auth.getCurrentUser().token); return this.http .post(endpoint, formData, body) .map(() => { return true; }) }
Content-Disposition: form-data; name="fileKey"; filename="file.docx" Content-Type: application/octet-stream <file>
W ten sposób implementuję przesyłanie pliku do web API w projekcie.
Podzielam się o kogo martwić.
Krok po kroku
ASP.NET Web API
Formularz HTML
Plik TS do korzystania z API
Service TS
źródło
Bardzo łatwą i najszybszą metodą jest przesyłanie plików w formacie ng2 .
Zainstaluj przesyłanie plików ng2 przez npm.
npm i ng2-file-upload --save
Najpierw zaimportuj moduł do swojego modułu.
Narzut:
W twoim składniku ts:
To najprostsze użycie tego. Aby poznać całą moc tego, zobacz demo
źródło
Używam Angulara 5.2.11, podoba mi się rozwiązanie dostarczone przez Gregora Doroschenko, jednak zauważyłem, że przesłany plik ma zero bajtów, musiałem wprowadzić niewielką zmianę, aby działał dla mnie.
Następujące linie (formData) nie działały dla mnie.
https://github.com/amitrke/ngrke/blob/master/src/app/services/fileupload.service.ts
źródło
Ok, ponieważ ten wątek pojawia się wśród pierwszych wyników google, a dla innych użytkowników mających to samo pytanie, nie musisz ponownie wskoczyć na koło, jak wskazał trueboroda, istnieje biblioteka przesyłania plików ng2, która upraszcza ten proces przesyłania plik z kątami 6 i 7 wszystko, co musisz zrobić, to:
Zainstaluj najnowszą wersję Angular CLI
Następnie zainstaluj rx-kompatybil, aby uzyskać informacje dotyczące zgodności
Zainstaluj przesyłanie plików ng2
Zaimportuj dyrektywę FileSelectDirective do swojego modułu.
W twoim komponencie
Szablon
Aby lepiej zrozumieć, możesz sprawdzić ten link: Jak przesłać plik za pomocą Angular 6/7
źródło
Osobiście robię to za pomocą ngx-material-file-input dla frontonu i Firebase dla back-endu. Dokładniej C głośny schowek dla Firebase dla zaplecza w połączeniu z Cloud Firestore. Poniżej przykład, który ogranicza plik do nie więcej niż 20 MB i akceptuje tylko niektóre rozszerzenia plików. Używam również Cloud Firestore do przechowywania linków do przesłanych plików, ale możesz to pominąć.
contact.component.html
contact.component.ts (część walidatora rozmiaru)
contact.component.ts (część do przesyłania plików)
Storage.rules
źródło
toString()
deklaracji contactForm?toString()
jest bezużyteczne, zredagowałem moją odpowiedź. Dla tych, którzy przeczytaliby ten komentarz, na końcufileUploader
w contact.component.ts miałem])].toString()})
. Teraz to po prostu:])]})
.Musimy utworzyć folder „temp” na dysku C, a następnie ten kod wydrukuje Json w konsoli i zapisze przesłany plik w utworzonym folderze
źródło
Najpierw musisz skonfigurować HttpClient w swoim projekcie Angular.
Otwórz plik src / app / app.module.ts, zaimportuj HttpClientModule i dodaj go do tablicy importów modułu w następujący sposób:
Następnie wygeneruj komponent:
Następnie wygeneruj usługę przesyłania:
Następnie otwórz plik src / app / upload.service.ts w następujący sposób:
Następnie otwórz plik src / app / home / home.component.ts i zacznij od dodania następujących importów:
Następnie zdefiniuj zmienne fileUpload i pliki i wstrzyknij UploadService w następujący sposób:
Następnie zdefiniuj metodę uploadFile ():
Następnie zdefiniuj metodę uploadFiles (), której można użyć do przesłania wielu plików obrazów:
Następnie zdefiniuj metodę onClick ():
Następnie musimy utworzyć szablon HTML naszego interfejsu do przesyłania obrazów. Otwórz plik src / app / home / home.component.html i dodaj następującą treść:
Sprawdź ten samouczek i ten post
źródło
Kompletny przykład przesyłania plików za pomocą Angulara i nodejsa (ekspresowego)
Kod HTML
Kod części TS
Kod węzła Js
fileUpload kontroler API
Prześlij usługę za pomocą multera
źródło
Spróbuj tego
zainstalować
Import
HTML
źródło
W Angular 7/8/9
Link źródłowy
Za pomocą formularza Bootstrap
W klasie komponentów
źródło