2011-11-19 11 views
5

ASIFormDataRequest का उपयोग कर सर्वर पर फ़ाइलों को अपलोड करते समय बहुत अजीब (मुझे) समस्या प्राप्त होती है।ASIHTTPRequest: डेटा (सर्वर) अपलोड करने के दौरान एक (संभावित रूप से) वाहक-विशिष्ट समस्या खाली POST

वाईफाई पर अपलोड करते समय, कोई समस्या नहीं है, मैं बस ठीक अपलोड कर सकता हूं। वाहक के रूप में ओ 2 यूके का उपयोग करके 3 जी पर अपलोड करते समय, कोई समस्या नहीं है। जब मैं वोडाफोन यूके का उपयोग कर एक ही सर्वर का उपयोग कर उसी कोड का उपयोग कर अपलोड करता हूं, HTTP अनुरोध सर्वर पर पोस्ट की गई सामग्री के साथ आता है। अगर मैं एक ही अनुरोध का प्रयास करता हूं लेकिन एक छवि अपलोड किए बिना (बस कुछ पोस्ट डेटा के रूप में test => yes जोड़ें), तो यह काम करेगा, लेकिन अगर मेरे पास test => yes है और फ़ाइल संलग्न है, तो यह POST के साथ सर्वर पर आता है डेटा छीन लिया।

एनबी मैं आईफोन 4 एस पर ASIHTTPRequest का नवीनतम संस्करण उपयोग कर रहा हूं, और यह वोडाफोन यूके और ओ 2 यूके का उपयोग करके कई अन्य फोनों पर पुन: उत्पन्न होता है।

<?php 
error_reporting(E_ALL); 
ini_set("display_startup_errors","1"); 
ini_set("display_errors","1"); 

echo "FILES: ".print_r($_FILES,true); 
echo "POST: ".print_r($_POST,true); 
echo "GET: ".print_r($_GET,true); 

die('done.'); 

ObjC कोड मैं का उपयोग कर रहा है:

तो, मैं निम्नलिखित PHP स्क्रिप्ट, जो सिर्फ बाहर प्रिंट यह क्या प्राप्त है पर मेरी ObjC कोड ओर इशारा करते हुए कर रहा हूँ

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString: @"http://myserver.com/debugger.php"]; 
    ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url]; 

    [request setDelegate:self]; 
    [request setDidFinishSelector:@selector(networkRequestSuccess:)]; 
    [request setDidFailSelector:@selector(networkRequestFailure:)]; 
    [request setTimeOutSeconds:120]; 

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"smalltestimage" ofType:@"png"]; 
    NSData *myData = [NSData dataWithContentsOfFile:filePath]; 
    if (myData) { 
     [request addPostValue:@"Yes" forKey:@"Test"]; 
     [request addData:myData withFileName:@"smalltestimage.png" andContentType:@"image/png" forKey:@"photos"]; 
     [request startSynchronous]; 
    } 
    else{ 
     NSLog(@"File not found.."); 
    } 

    [request autorelease]; 
} 

- (void)networkRequestSuccess:(ASIHTTPRequest *)request{ 

    NSLog(@"Success Response: %@", [request responseString]); 

} 

- (void)networkRequestFailure:(ASIHTTPRequest *)request{ 
    NSLog(@"Fail Response: %@", [request responseString]); 
} 

मैं वाईफ़ाई के साथ अनुप्रयोग चलाने के सक्षम होने पर, या O2 ब्रिटेन पर, मैं निम्नलिखित प्रतिक्रिया मिल:

Success Response: FILES: Array 
(
    [photos] => Array 
     (
      [name] => smalltestimage.png 
      [type] => image/png 
      [tmp_name] => /tmp/phpYTdw4g 
      [error] => 0 
      [size] => 13211 
     ) 

) 
POST: Array 
(
    [Test] => Yes 
) 
GET: Array 
(
) 
done. 

अब तक इतना अच्छा है!

मैं वाईफाई विकलांग, लेकिन वोडाफ़ोन ब्रिटेन पर लगभग पूर्ण 3 जी संकेत के साथ के साथ पुनः प्रयास हैं:

Success Response: FILES: Array 
(
) 
POST: Array 
(
) 
GET: Array 
(
) 
done. 

बहुत अजीब: न केवल फ़ाइल अब याद आ रही है, लेकिन 'परीक्षण' पोस्ट मूल्य भी है लापता। हालांकि, PHP या ASIHTTPRequest से कोई त्रुटि नहीं है।

क्या कोई मेरे लिए कोई प्रकाश डाल सकता है? यदि वोडाफोन इस तरह की चीजों को जोड़ रहा है, तो यह अधिक प्रसिद्ध क्यों नहीं है? एकमात्र अन्य व्यक्ति जो मुझे एक समान समस्या की रिपोर्ट कर सकता है posted a year ago

अगर मैं [अनुरोध addData] लाइन बाहर टिप्पणी है, तो यह पूरी तरह से काम करता है:

Success Response: FILES: Array 
(
) 
POST: Array 
(
    [Test] => Yes 
) 
GET: Array 
(
) 
done. 

बहुत अजीब। मैं पूरे दिन यह काम करने की कोशिश कर रहा हूं लेकिन अब तक कोई भाग्य नहीं है। अगर कोई भी प्रकाश ला सकता है, या यहां तक ​​कि एक ही समस्या है तो मैं बहुत आभारी हूं।

उत्तर

6

वाह। वह पागल है। यह मेरे लिए एक टूटी हुई HTTP प्रॉक्सी की तरह लगता है। प्रॉक्सी को आपके डेटा से गड़बड़ करने से रोकने और रोकने के लिए आप एचटीटीपीएस का उपयोग कर सकते हैं?

तुम भी DEBUG_REQUEST_STATUS (ASIHTTPRequest.m में प्रयुक्त) को परिभाषित करता है, तो उदाहरण के लिए, आप एक रीडायरेक्ट जो अपनी पोस्ट शरीर या कुछ गिर रही है हो रही है देखने के लिए कोशिश कर सकते हैं।

+0

ओह मैन। यहाँ प्रतिक्रिया जब HTTPS का उपयोग करके बताया गया है: 'सफलता प्रतिक्रिया: फ़ाइलें: सरणी ( [तस्वीरें] => सरणी ( [नाम] => smalltestimage.png [प्रकार] => छवि/png [tmp_name] =>/tmp/phpzzo5xF [त्रुटि] => 0 [आकार] => 13211 ) ) पोस्ट: सरणी ( [टेस्ट] => हां ) मिलती है: सरणी ( ) किया। ' तो यह HTTPS पर काम कर रहा है, और मुझे लगता है कि यह किसी भी तरह से संबंधित है। बहुत अजीब!! क्या वोडाफोन के पास ऐसा करने का कोई कारण होगा? –

+0

कोई सुराग नहीं। यह वास्तव में लगता है कि यह एक टूटी हुई HTTP प्रॉक्सी है जिसे उन्होंने स्थापित किया है। उम्मीद है कि मदद की! –

+0

उपरोक्त। चीयर्स :) –

2

यह ज्ञात है कि कई मोबाइल वाहक प्रॉक्सी हैं जो कुछ स्थितियों में चीजों को तोड़ते हैं।

पुराने दिनों में (कहें, लगभग 2002), लगभग हर वाहक के पास प्रॉक्सी थी जो अधिकांश छवियों के लिए बहुत गंभीर हानिकारक संपीड़न लागू करेगी और कभी-कभी जावास्क्रिप्ट/एचटीएमएल/सीएसएस को भी संपीड़ित करेगी - विचार वेब को आजमाने और बनाने का था जीपीआरएस कनेक्शन पर प्रयोग योग्य। यह लगभग हमेशा एक पारदर्शी http प्रॉक्सी के रूप में लागू किया गया था।

वोडाफोन यूके के मामले में (और मुझे विश्वास है कि अधिकांश वाहक ऐसा करते हैं) उनके पास आम तौर पर एक एपीएन होता है जिसमें यह व्यवहार होता है, और ऐसा नहीं होता है। वोडाफोन पर मेरा मानना ​​है कि 'वैप' वीपीएन में संपीड़न व्यवहार है, लेकिन 'वेब' कोई नहीं करता है - लेकिन यह थोड़ी देर हो गया है क्योंकि मुझे इससे निपटना पड़ा था, इसलिए मैं गलत हो सकता हूं और/या यह तब से बदल सकता है। कभी-कभी वे एक जीपीआरएस बनाम 3 जी कनेक्शन पर अलग-अलग व्यवहार करते हैं।

बेशक, इनमें से कोई भी यह नहीं बताता कि यह आपके द्वारा अपलोड की जा रही छवि को क्यों छोड़ रहा है, इससे कोई समझ नहीं आती है क्योंकि यह किसी भी बैंडविड्थ को जीपीआरएस/3 जी पक्ष पर सहेज नहीं पाएगा। यह हो सकता है कि आप किसी भी तरह प्रॉक्सी में एक बग ट्रिगर कर रहे हैं। मोबाइल फोन से पीएनजी अपलोड करना शायद थोड़ा असामान्य है, जो बता सकता है कि समस्याओं की और रिपोर्ट क्यों नहीं है - मैं शर्त लगाता हूं कि मोबाइल फोन से 99.9% छवि अपलोड जेपीईजी हैं।

https का उपयोग करके, जैसा कि जेसी ने पहले ही सुझाव दिया है, एक अच्छा कामकाज है। चूंकि छवियां उन चीजों में से एक हैं जो प्रॉक्सी ट्रिगर होती हैं, सामग्री प्रकार को टैग/छवि के रूप में टैग करने में मदद नहीं कर सकती है, लेकिन मुझे यकीन नहीं है कि वास्तव में इसकी अनुशंसा की जा सकती है।

+1

+1 पृष्ठभूमि के बारे में अधिक सुनने के लिए साफ करें। –

+1

+1 यह एक शानदार प्रतिक्रिया है, धन्यवाद। पीएनजी बिंदु पर, मैंने मूल रूप से इस समस्या का अनुभव किया जब मैं निम्नलिखित कोड का उपयोग कर रहा था, जो अनुरोध पर एममी प्रकार (AFAIK) सेट नहीं कर रहा था: '[अनुरोध सेटफाइल: फ़ाइलपाथ के लिए: [imageToUpload ऑब्जेक्टफोरकी: @" अद्वितीय "] ];' –

+0

संपादित करें: मैंने अभी इसका परीक्षण किया है और पाया है कि यह अभी भी तब भी हो रहा है जब jpg को 'image/jpg' –

संबंधित मुद्दे