swift — загрузка Alamofire через .POST в PHP. Где находится загруженный файл?

Я использую метод .upload для загрузки в файл php на моем сервере, и он, кажется, работает (я получаю ответ 200)

upload(.POST, Config.uploadArbeitsauftragURL, urlToFile!)

Как я могу получить доступ к этому файлу в моем файле PHP?
Когда я хочу использовать $_FILEМне нужен дескриптор для соответствующего массива-индекса, и я не могу указать любой.

0

Решение

Сегодня я столкнулся с той же проблемой, когда что-то создавал. Мое слегка взломанное решение

быстрый

let fileName = "myImage.png"
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let filePath = documentsPath.stringByAppendingPathComponent(fileName)
let fileURL = NSURL(fileURLWithPath: filePath)!

Alamofire.upload(.POST, "http://example.com/upload.php?fileName=\(fileName)", fileURL)

upload.php

// get the file data
$fileData = file_get_contents('php://input');
// sanitize filename
$fileName = preg_replace("([^\w\s\d\-_~,;:\[\]\(\).])", '', $_GET["fileName"]);
// save to disk
file_put_contents($fileName, $fileData);

объяснение

Похоже, Alamofire отправляет файл в виде потока октетов, поэтому просто размещает необработанные данные файла. Мы можем получить это из ввода php: //, но мы не получаем имя файла. Таким образом, хакерское решение состоит в том, чтобы просто отправить имя файла в строке запроса.

Помните, это не «правильный» путь. Но сейчас это быстрое решение

2

Другие решения

Я знаю, но у меня была такая же проблема. Все выглядело нормально, но я не мог получить доступ к данным файла из моего серверного приложения. Используя описанный там метод (многочастная загрузка файла), я смог загрузить файл. Кроме того, этот метод позволяет загружать более одного файла или отправлять другие параметры вместе с запросом.

0

По вопросам рекламы [email protected]