Я застрял.
и потерял, что делать, чтобы решить это.
Я отправляю изображение с помощью методов ниже в Swift с iPhone.
И я вижу, что данные принимаются сервером с Wireshark.
Я также вижу в терминале php-сервера, что я получаю данные.
это данные, с которыми я не знаю, как обращаться.
В настоящее время я использую скрипт php ниже для обработки всего с загрузкой, есть много тестовых переменных, которые я использую, чтобы просто посмотреть, смогу ли я выяснить, что я получаю, если что-нибудь.
public func post(data: Data, url: URL)
{
var request = URLRequest(url: url)
//request.addValue("filenameTest.jpg", forHTTPHeaderField: "filename")
request.httpMethod = "POST"let body = createBodyWithParameters(filePathKey: "filenameTest.jpg",data: data,boundary: generateBoundaryString())
request.setValue("Keep-Alive", forHTTPHeaderField: "Connection")
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration,delegate: self, delegateQueue: OperationQueue.main)
let task = session.uploadTask(with: request as URLRequest, from: body)
task.resume()
}
func createBodyWithParameters(filePathKey: String?, data: Data!, boundary: String) -> Data {
var body = Data();
let mimetype = "image/jpg"
body.append(Data( "--\(boundary)\r\n".utf8))
//body.append(Data( "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(parameters!["filename"]!)\"\r\n".utf8))
body.append(Data( "Content-Disposition: form-data; filename=\"\(filePathKey!)\"\r\n".utf8))
body.append(Data( "Content-Type: \(mimetype)\r\n\r\n".utf8))body.append(data)
body.append(Data( "\r\n".utf8))
body.append(Data( "--\(boundary)--\r\n".utf8))
return body
}
func generateBoundaryString() -> String {
return "----Boundary---"}
Requested: ??~?3?<??6??Ns?i|2?~`kxB?;??N???$_?|?9?:
Requested: ???c?S?Y?Gn8>?5?k???y?H??3?N:???????M?_?r??q????~??O?6?Pc?]%"d??x??u?:
Requested: ??mRKmS????:
Requested: ????~k]?~}t?E??EO???????'???-????????$?W??|_?Wsl???f???n?:?Q????_?_???_?_2c_8?S?c?:
Requested: ?????#?:
Requested:
[Thu Mar 9 13:55:51 2017] 192.168.250.101:55327 [200]: /<?php$target_dir = "wp-content/uploads";
if(!file_exists($target_dir))
{
mkdir($target_dir, 0777, true);
}
$target_dir = $target_dir . "/" . basename($_SERVER['HTTP_FILENAME']);if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir)) {
echo json_encode([
"Message" => "The file ". basename(header('filename')). " has been uploaded.",
"Status" => "OK"]);
} else {
echo json_encode([
"Message" => "Sorry, there was an error uploading your file.",
"Status" => "Error"
]);
}
?>
и я использую этот вид кода, чтобы выяснить, какие переменные содержат что.
$testvar = $_SERVER['HTTP_FILENAME'];
file_put_contents("php://stdout", "\nRequested : $testvar /r/n");
$testvar = count($_REQUEST);
$testvar = $_REQUEST[3];
file_put_contents("php://stdout", "\nRequested : $testvar /r/n");
foreach($_FILES['file'] as $value){
$testvar = ": ". $value;
file_put_contents("php://stdout", "\nRequested: $testvar \r\n");
}
Я не знаю, как это исправить. Я знаю, что данные там просто не могут получить их. Я пробовал несколько способов отправить его с быстрой частью. у этого плюс 2 других была та же проблема, когда я перешел на сторону php, имя файла нигде не было найдено, и я даже не смог найти временное имя файла.
Обратите внимание, что данные изображения никогда не сохраняются в файл на iPhone, и я не собираюсь этого допускать. Мне просто нужно взять изображение с помощью камеры и отправить его, я достиг этого сейчас, но когда я пытаюсь сохранить файл изображения на стороне PHP, все становится на первый взгляд невозможным.
в $ _FILES нет содержимого, насколько я вижу, что содержимое находится в $ _REQUEST, а также в файле, но когда я пытаюсь получить к нему доступ, я просто получаю проводные знаки и вопросительные знаки.
Я решил это в конце концов. Моя проблема заключалась в том, что я генерировал новую границу вместо использования одной и той же границы в каждом запросе.
а также я забыл добавить multipart / form-data в Content-Type запроса.
Также обратите внимание на — в конце моего createBodyWithParameters выше … они, очевидно, важны, что я обнаружил, случайно удалив их.
let boundary = generateBoundaryString()
var request = URLRequest(url: url)
request.httpMethod = "POST"request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let body = createHttpBody(filename:"filenametest.jpg" , objData: objData,boundary: boundary)
Других решений пока нет …