2016-04-28 9 views
2

PHPサーバーに迅速に画像をアップロードしようとすると問題が発生しました。 PHPがファイルを処理するまでは、すべてが見た目によく見えます。その瞬間に私はエラーを受け取ります。swiftからphpサーバへのアップロード中にエラーが発生しました

SWIFTコードの関連部分は次のとおりです。

func myImageUploadRequest(image: UIImage, realfilename: String) 
{ 

    let myUrl = NSURL(string: "http://www.ignistudios.com/boda/postImage.php"); 

    let request = NSMutableURLRequest(URL:myUrl!); 
    request.HTTPMethod = "POST"; 

    let param = [ 
     "firstName" : "username", 
     "lastName" : "lastname", 
     "userId" : "9" 
    ] 

    let boundary = generateBoundaryString() 

    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 


    let imageData = UIImageJPEGRepresentation(image, 1) 
    print(imageData.debugDescription) 

    if(imageData==nil) { return; } 

    request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", realfilename: realfilename, imageDataKey: imageData!, boundary: boundary) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 

     // You can print out response object 
     print("******* response = \(response)") 

     // Print out reponse body 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("****** response data = \(responseString!)") 



    } 

    task.resume() 

} 


func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, realfilename: String?, imageDataKey: NSData, boundary: String) -> NSData { 
    var body = NSMutableData(); 

    if parameters != nil { 
     for (key, value) in parameters! { 
      body.appendString("--\(boundary)\r\n") 
      body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
      body.appendString("\(value)\r\n") 
     } 
    } 

    let filename = realfilename 

    let mimetype = "image/jpg" 

    body.appendString("--\(boundary)\r\n") 
    body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 
    body.appendString("Content-Type: \(mimetype)\r\n\r\n") 
    body.appendData(imageDataKey) 
    body.appendString("\r\n") 



    body.appendString("--\(boundary)--\r\n") 

    return body 
} 




func generateBoundaryString() -> String { 
    return "Boundary-\(NSUUID().UUIDString)" 
} 

、PHPは

<?php 
$uploaddir = '/fotos/'; 
$uploadfile = $uploaddir . basename($_FILES['file']['name']); 
echo "<p>"; 
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Upload failed"; 
} 
echo "</p>"; 
echo '<pre>'; 
echo 'Here is some more debugging info:'; 
print_r($_FILES); 
print "</pre>"; 
?> 

そして最後で、私が手にエラーがある:

******応答データ=

アップロードに失敗しました

Here is some more debugging info:Array 
(
    [file] => Array 
     (
      [name] => Optional(\"boda20160428_135709.jpg\") 
      [type] => 
      [tmp_name] => 
      [error] => 1 
      [size] => 0 
     )

)

すべてのヒントは非常に高く評価されます。

+1

RTFM? http://php.net/manual/en/features.file-upload.errors.phpエラー#1 =ファイルサイズがphp.iniの制限を超えています –

答えて

0

Marc BさんがPHPファイルのアップロードサイズの問題であると回答したようです。

ただし、このような場合は、チェーン内の各リンクを個別にテストする価値があります。例えば、createBodyWithParametersの出力をテストし、レビューする。テストを作成し、テストを実行して、ヘッダーが正しく形成されていることを確認します。特に、文字列のエンコーディングが正しいことを確認してください。私はNSMutableDataappendStringメソッドに慣れていません。

他の潜在的な問題を排除するために、その出力をより直接的にサーバーに供給することが可能なはずです。

+0

ありがとうございます。一度max_size問題が重複すると、エラー=> 0になりますが、アップロードは失敗します。トレースはほとんど何も言わない:******レスポンスデータ=

アップロード失敗

Here is some more debugging info:Array ( [file] => Array ( [name] => img.jpg [type] => image/jpg [tmp_name] => /tmp/phppWL1iR [error] => 0 [size] => 66605 ) ) 
Gosdi

関連する問題