#javascript #html #angular #typescript
Вопрос:
Я следую этому руководству https://blog.angular-university.io/angular-file-upload/ для создания файла, загруженного в мой проект. Он правильно работает с этим кодом:
<input type="file" class="file-input (change)="onFileSelected($event)" #fileUpload>
<div class="file-upload">
{{fileName || "No file uploaded yet."}}
<button mat-mini-fab color="primary" class="upload-btn"
(click)="fileUpload.click()">
<mat-icon>attach_file</mat-icon>
</button>
</div>
и:
onFileSelected(event) {
const file:File = event.target.files[0];
if (file) {
this.fileName = file.name;
const formData = new FormData();
formData.append("thumbnail", file);
const upload$ = this.http.post("/api/thumbnail-upload", formData);
upload$.subscribe();
}
}
Эта строка {{fileName || "No file uploaded yet."}}
позволяет мне увидеть имя загруженного файла, но я хотел бы, чтобы это имя было «кликабельным», и открыть загруженный файл. Как я могу это сделать?
РЕДАКТИРОВАТЬ: Загруженный файл представляет собой либо pdf, либо изображение, и я хотел бы открыть его после нажатия.
Комментарии:
1. Что именно вы подразумеваете под
open
загруженным файлом ? Это текстовый файл, содержимое которого вы хотите отобразить ? Это изображение, которое вы хотите отобразить на веб-странице ?2. Это может быть pdf-файл или изображение, я хотел бы открыть файл при нажатии на него
3. Хотели бы вы открыть его в своем собственном приложении или с помощью браузера, такого как Chrome?
4. Я бы просто хотел открыть его, так что в браузере он тоже идеален
5. Дело в том, что ввод[тип=»файл»] не сохраняет локальный путь, а сохраняет файл в памяти. Поэтому, если вы хотите показать файл img или pdf, вам нужно будет прочитать его в памяти и отобразить в своем html. Вы можете легко решить часть img, но для отображения PDF-файлов вам понадобится плагин, по моему опыту.
Ответ №1:
Вы должны попробовать следующее решение
В HTML
<input type="file" id="fileUpload" class="file-input (change)="onFileSelected($event)" #fileUpload>
<div class="file-upload">
{{fileName || "No file uploaded yet."}}
<button mat-mini-fab color="primary" class="upload-btn"
(click)="openFileUpload(fileUpload)">
<mat-icon>attach_file</mat-icon>
</button>
</div>
В ТС
openFileUpload(fileUpload){
document.getElementById("fileUpload").click();
}
onFileSelected(event) {
const file:File = event.target.files[0];
if (file) {
this.fileName = file.name;
const formData = new FormData();
formData.append("thumbnail", file);
const upload$ = this.http.post("/api/thumbnail-upload", formData);
upload$.subscribe();
}
}
Комментарии:
1. Ваш ответ был бы лучшим доказательством в будущем, если бы вы объяснили, что вы изменили и почему …