Как загрузить каталог в .Net Core Web Api? - PullRequest
0 голосов
/ 02 ноября 2019

Я видел несколько учебных пособий по загрузке файлов / файлов в ядре .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);
    }

}

1 Ответ

0 голосов
/ 02 ноября 2019

Каталоги отличаются от файлов тем, что они представляют собой не данные как таковые, а логическое структурирование хранилища. Поскольку каталоги обрабатываются по-разному в зависимости от операционной системы сервера, они не будут включены в операцию загрузки файла. Вы можете посмотреть на использование FTP, но для целей вашего кода, который вы разместили, вам нужно будет перебрать каталоги и файлы, которые вы хотите загрузить, и поместить их в нужные целевые каталоги, используя вашу логику кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...