Как получить загруженный файл на PHP? Файл загружен приложением iOS, написанным на Swift - PullRequest
0 голосов
/ 08 сентября 2018

Вот мой быстрый код, который загружает файл из приложения.

final class UploadService {

  // I'm renting a remote server and the php code is on that
  private let videoUploadPath = "http://myUploadPath.php"

  var uploadsSession: URLSession!
  var activeUploads: [URL: Upload] = [:]

  func startUpload(medium: Medium) {

    guard let url = URL(string: videoUploadPath) else { return }

    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    let upload = Upload(medium: medium)
    upload.task = self.uploadsSession.uploadTask(with: request, fromFile: medium.avUrlAsset.url)
    upload.task?.resume()
    upload.isUploading = true
    activeUploads[upload.medium.avUrlAsset.url] = upload
  } 
}

Обратите внимание, что я должен использовать

func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask

// Apple documentation: Parameters request A URL request object that provides the URL, cache policy, request type, and so on. The body stream and body data in this request object are ignored.

для загрузки видео с телефона, так как это единственный метод, который позволяет фоновую загрузку (видео обычно довольно большие, поэтому я ДОЛЖЕН сделать фоновую загрузку возможной). Однако эта функция отбрасывает все данные тела.

Вот мой код PHP, который получает загруженный файл и сохраняет его в нужном месте:

$directory = "../storage/videos/";
$destination = $directory . basename($_FILES["file"]["name"]);

if (move_uploaded_file($_FILES["file"]["tmp_name"], $destination)) {
  $returnArray["status"] = "200";
  $returnArray["message"] = "Upload success";
  echo json_encode($returnArray);
} else {
  $returnArray["status"] = "300";
  $returnArray["message"] = "Upload failed" . $_FILES["file"]["error"];
  echo json_encode($returnArray);
  return;
}

Если честно, я знаю, что это не удастся, потому что я не могу указать тип файла и имя, которые требуются $_FILES["file"]["name"] в коде PHP.

Поэтому мой вопрос: как указать имя и тип файла для загрузки? Так как функция func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask как я уже говорил, отбрасывает все данные тела http, создавая заголовок http, который содержит тип и имя файла ИЛИ, есть ли другой способ для PHP получить файл, который я только что загрузил? На данный момент $ _FIELS полностью пуст. Я новичок в PHP, извините, если я не сказал это достаточно ясно.

Кроме того, для Content-Type я использовал multipart/form-data, когда я загружаю изображение для изменения изображения профиля пользователя, я добавляю данные изображения вместе с другими данными, такими как uid, а затем присоединяю эти данные в качестве данных тела в тело http. Но теперь мне нужно загрузить один файл, потому что все данные тела в запросе будут игнорироваться в соответствии с требованием iOS. Как я могу это сделать?

Многие дни застряли в этом, пожалуйста, помогите. Большое спасибо !!

...