Как ограничить тип загружаемого файла / формат в GCDWebUploader - PullRequest
0 голосов
/ 14 октября 2019

Мое приложение использует GCDWebUploader для загрузки аудиофайлов в песочницу iPhone. Это работает хорошо, но я хочу ограничить тип / формат загружаемых файлов, который может загружать пользователь, например, xxx.doc, xxx.jpg запрещены для загрузки. В настоящее время я хочу разрешить только форматы .MP3 и .AAC.

Я нашел этот метод uploadFile в GCDWebUploader.m, возможно, это то, что мне нужно, чтобы переопределить этот метод в другом классе. Но это в target-C, как я могу использовать его в Swift? Также то, что мне нужно изменить соответственно в файле html и js. Приветствуется любая помощь и подсказка.

/ / / uploadFile метод в GCDWebUploader.m

- (GCDWebServerResponse*)uploadFile:(GCDWebServerMultiPartFormRequest*)request {
  NSRange range = [[request.headers objectForKey:@"Accept"] rangeOfString:@"application/json" options:NSCaseInsensitiveSearch];
  NSString* contentType = (range.location != NSNotFound ? @"application/json" : @"text/plain; charset=utf-8");  // Required when using iFrame transport (see https://github.com/blueimp/jQuery-File-Upload/wiki/Setup)

  GCDWebServerMultiPartFile* file = [request firstFileForControlName:@"files[]"];
  if ((!_allowHiddenItems && [file.fileName hasPrefix:@"."]) || ![self _checkFileExtension:file.fileName]) {
    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Uploaded file name \"%@\" is not allowed", file.fileName];
  }
  NSString* relativePath = [[request firstArgumentForControlName:@"path"] string];
  NSString* absolutePath = [self _uniquePathForPath:[[_uploadDirectory stringByAppendingPathComponent:GCDWebServerNormalizePath(relativePath)] stringByAppendingPathComponent:file.fileName]];

  if (![self shouldUploadFileAtPath:absolutePath withTemporaryFile:file.temporaryPath]) {
    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Uploading file \"%@\" to \"%@\" is not permitted", file.fileName, relativePath];
  }

/ / / Предупреждение в index.html, его можно использовать для оповещения о загрузке предупреждения.

    <script type="text/x-tmpl" id="template-alert">
      <div class="alert alert-{%=o.level%} alert-dismissable">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        <strong>{%=o.title%}</strong>{%=o.description%}
      </div>
    </script>

/ / / код в index.js

    fail: function(e, data) {
      var file = data.files[0];
      if (data.errorThrown != "abort") {
        _showError("Failed uploading \"" + file.name + "\" to \"" + _path + "\"", data.textStatus, data.errorThrown);
      }
    },

1 Ответ

0 голосов
/ 15 октября 2019

Ну, я нашел, как это сделать сегодня. Это очень просто, просто определите allowedFileExtensions свойство, которое предоставляется в GCDWebUploader. В моем случае, как показано ниже, фрагмент кода.

/ / / определите это свойство в своем собственном классе, тогда этот вопрос был решен.

// create webUploader, access with your iPhone's IP from computer's browser.
    static func initWebUploader() {
        webUploader.start()
        webUploader.allowedFileExtensions = ["aac", "mp3"]
        if webUploader.serverURL != nil {
            print("Visit \(webUploader.serverURL!) in your web browser")
        } else {
            print("You are not connected with Wifi")
        }
    }
...