我'm trying to upload an image sent from my iOS app to my bucket storage for app engine and I'米使用php . 现在让我清楚一下谷歌给出的网页表单的例子与我的处理程序完美配合,并在下面注释掉所以我确定我的处理程序很好,花花公子也可以在使用应用程序引擎和存储桶之前直接使用我的处理程序 . 对于不熟悉createUploadUrl Here is the documentation on it的人 .

<?php 
require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';

use google\appengine\api\cloud_storage\CloudStorageTools;

$options = [ 'gs_bucket_name' => 'my-bucket-name' ];

$upload_url = CloudStorageTools::createUploadUrl('/CustomPostHandler.php', $options);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: multipart'
        )
);

$context = stream_context_create($opts);

$result = file_get_contents($upload_url,false,$context);

echo $result;
/*<form action="<?php echo $upload_url?>" enctype="multipart/form-data" method="post">
    Files to upload: <br>
   <input type="file" name="userfile" size="10000000">
   <input type="submit" value="Send">
</form>*/

?>

因为我想使用存储桶我调用createUploadUrl,因为这就是谷歌想要的 . 我正在iOS前端使用swift,而我收到的用于回显$ result的错误代码是“此URL上不接受请求的内容类型”我试图使用'multipart / form-data'来实现PHP部分,它给了我错误'坏类型使用多部分'或类似的东西 .

iOS代码发布在下面,并且再次说不能在app引擎上运行但在本地服务器上运行完美 . 错误信息是我明显的问题,但我认为它可能与octet-stream有关,我不确定 . 任何帮助,将不胜感激!!!谢谢!

var postString = "\(PHP_PATH)UploadTest.php"
        
        var request = NSMutableURLRequest(URL: NSURL(string: postString)!)
        
        request.HTTPMethod = "POST"
        
        var boundary = "---------------------------14737809831466499882746641449"
        
        var contentType = "multipart/form-data; boundary=\(boundary)"
        
        request.addValue(contentType, forHTTPHeaderField: "Content-Type")
        
        println(request)
        
        var body = NSMutableData()
        
        body.appendData(("\r\n--\(boundary)\r\n" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!)
        
        body.appendData(("Content-Disposition: form-data; name=\"userfile\"; filename=\"\(fileName)\"\r\n" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!)
        
        body.appendData(("Content-Type: application/octet-stream\r\n\r\n" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!)
        
        body.appendData(imageData)
        
        body.appendData(("\r\n--\(boundary)--\r\n" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!)
        
        request.HTTPBody = body
        
        var returnData = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
        
        println(NSString(data: returnData!, encoding: NSUTF8StringEncoding)!)