Я видел несколько учебных пособий по загрузке файлов / файлов в ядре .net, но не вижу учебных пособий по загрузке каталогов. Итак, я хочу загрузить все файлы и папки, которые находятся в выбранной папке. (Сама папка также включена.)
Например, существует дерево каталогов, подобное этому (Directory A
содержит file1.txt
и каталог B
. Каталог B
содержит только file2.txt
):
A
|
-file1.txt
-B
|
-file2.txt
, и я хочу загрузить каталог A
в каталог сервера D\E\F
. Поэтому я выбираю каталог A
в графическом интерфейсе. После загрузки я хочу видеть каталог A
content в D\E\F\A
path.
В приведенном ниже коде я могу выбрать папку переднего плана, но она скопирует только один файл из папки. Что мне делать?
У меня есть очень простой HTML(Angular)
, например:
<div class="row" style="margin-bottom:15px;">
<div class="col-md-3">
<input webkitdirectory directory type="file" #file placeholder="Choose file" (change)="uploadFile(file.files)" style="display:none;">
<button type="button" class="btn btn-success" (click)="file.click()">Upload File</button>
</div>
<div class="col-md-4">
<span class="upload" *ngIf="progress > 0">
{{progress}}%
</span>
<span class="upload" *ngIf="message">
{{message}}
</span>
</div>
</div>
TypeScript(Angular)
:
public uploadFile = (files) => {
if (files.length === 0) {
return;
}
let fileToUpload = <File>files[0];
const formData = new FormData();
formData.append('file', fileToUpload, fileToUpload.name);
this.httpClient.post(`http://192.168.1.10:58432/file`, formData, {reportProgress: true, observe: 'events'})
.subscribe(event => {
if (event.type === HttpEventType.UploadProgress)
this.progress = Math.round(100 * event.loaded / event.total);
else if (event.type === HttpEventType.Response) {
this.message = 'Upload success.';
this.onUploadFinished.emit(event.body);
}
});
}
Server(.net core)
сторона:
[HttpPost("file")]
public async Task UploadFile(IFormFile file)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), @"\\UBUNTU-N55SL\\cloudStorage", file.FileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
}