2013-08-02 64 views
1

這讓我撓了一段時間。NSData appendData:UIImageJPEGRepresentation()返回零

我正在準備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]]; 

我遇到的問題是,postDatanull運行這些行之後。使用NSLog我發現[postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];是導致這種情況發生的線。然後我繼續看看圖像是否是問題。 UIImageJPEGRepresentation(image, 1.0)將大量數據輸出到控制檯,並將圖像添加到UIImageView顯示我期待的.jpg。

我完全被詛咒了。請幫助>。 < 小號

編輯

略低於我一個崩潰之後已經意識到,它肯定張貼圖片 。

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

顯示280861(字節?),但<?php print_r($_FILES); ?>返回數組{}的PHP文件。

+0

你如何創建'postData'實例? – Wain

+0

NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSString * post = [NSString stringWithFormat:@「&json =%@」,jsonString]; NSMutableData * postData = [NSMutableData dataWithData:[post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]]; UIImage * image = xxxxx –

+0

剛注意到那是ASCII和其餘的UTF8。我改變了這個,沒有改進 –

回答

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]]; 

後我已經包含數據的第一個換行符似乎已經解決了這個

1
  1. UIImageJPEGRepresentation(image, 1.0)返回無法轉換爲NSString的NSData對象。一個jpeg不包含有效的字符。並且任意數據不能轉換爲有效的字符串。

  2. 即使UIImageJPEGRepresentation(image, 1.0)返回nil,[NSData dataWithData:]調用也會確保您附加到postData的數據不爲零。 [NSData dataWithData:nil];返回一個空的NSData實例,而不是零。

  3. 關於你的答案。 nil不是有效的字符串編碼。編譯器應該顯示一個警告,你應該在控制檯中看到一條警告:「檢測到錯誤的NSStringEncoding值0x0000,假設NSASCIIStringEncoding,在不久的將來會停止這種兼容性映射行爲。」

您不能將postData轉換回NSString。如果你想檢查圖像是NSData對象的一部分,你可以看看postData的長度。

+0

好的謝謝你的澄清,但是我仍然遇到了這個腳本的問題,我有一個PHP腳本, ?php print_r($ _ FILES)?>'返回一個空數組,這意味着數據仍然沒有被正確發佈,我將在OP中發佈完整的代碼 –

0

你怎麼告訴postData爲空?請注意,您無法使用以下類別/擴展名將其轉換爲UTF8字符串。

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