卡住了。 並失去了在做什麼來解決它。 我使用下面的方法在iPhone中使用Swift發送圖像。 我可以看到服務器使用Wireshark接收數據。 我也可以在php-server的終端中看到我正在接收數據。圖像上傳發送數據但未在接收端創建文件
這是我不知道如何處理的數據。
我目前正在使用下面的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");
}
我不知道如何解決這個問題。我知道那裏的數據似乎無法得到控制。我嘗試了幾種方式將它與快速部分一起發送。這一個加上另外兩個人有同樣的問題,當我到達PHP端文件名無處可尋,我甚至找不到該文件的臨時名稱。
請注意,圖像數據永遠不會保存到iPhone上的文件,我不打算讓這種情況發生。我只需要用相機拍攝圖像併發送它,現在我已經完成了,但是當我嘗試在PHP端保存圖像文件時,一切似乎都無法完成。
在$ _FILES中沒有內容,據我所知,內容在$ _REQUEST以及文件中,但是當我嘗試訪問該文件時,我只是收到有線標誌和問號。