1

これはかなり長い間私を悩ませてきました。

UIImageの一部として を投稿する準備をしていHTTP requestます。私は次のコードでこれをやっています:

[postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                        [postData appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"q%@\"; filename=\".jpg\"\r\n" , key] dataUsingEncoding:NSUTF8StringEncoding]];
                        [postData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
                        [postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];
                        [postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

私が抱えている問題は、postDataこれらnullの行を実行した後です。

を使用すると、これが発生する原因となっている行であるNSLog ことがわかりました。[postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];次に、画像に問題があるかどうかを確認しました。 UIImageJPEGRepresentation(image, 1.0)大量のデータをコンソールに出力し、イメージを a に追加すると、UIImageView期待していた .jpg が表示されます。

私は絶対にだまされています。助けてください >.< S

編集

以下で少し大失敗した後、間違いなく画像を投稿していることに気付きました。

NSLog(@"postData = %@",[postData length]);

280861 (バイト?) と表示されますが、PHP ファイル<?php print_r($_FILES); ?>は Array を返します{}

4

3 に答える 3

1

以下で解決:

[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\nfilename=\"%@.jpeg\"\r\nContent-Type: image/jpeg\r\n\r\n", key,key] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[NSData dataWithData:imageData]];
[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

すでに含まれているデータの後の最初の改行は、これを解決したようです

于 2013-08-05T10:10:19.073 に答える
0

どうやってpostDatanull だと判断したのですか? 以下のように、一部のカテゴリ/拡張子を使用して UTF8 文字列に変換できないことに注意してください。

extension NSData { func to_string(encoding:UInt = NSUTF8StringEncoding) -> String? { return NSString(data:self, encoding:encoding) as? String } }

于 2015-05-18T05:18:02.763 に答える