2012-06-22 14 views
6

मैं एंड्रॉइड में छवि अपलोड कर रहा हूं। वर्तमान में मेरा कोड केवल फाइल अपलोड करता है लेकिन मैं कुछ पैरामीटर भी भेजना चाहता हूं। मैंएंड्रॉइड में फ़ाइल के साथ पैरामीटर कैसे भेजें

FileInputStream fileInputStream = new FileInputStream(sourceFile); 
     URL url = new URL(upLoadServerUri); 
     conn = (HttpURLConnection) url.openConnection(); // Open a HTTP connection to the URL 
     conn.setDoInput(true); // Allow Inputs 
     conn.setDoOutput(true); // Allow Outputs 
     conn.setUseCaches(false); // Don't use a Cached Copy 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Connection", "Keep-Alive"); 
     conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
     conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
     conn.setRequestProperty("uploaded_file", fileName); 
     dos = new DataOutputStream(conn.getOutputStream()); 

     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd); 
     dos.writeBytes(lineEnd); 

     //Sending data 
     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd); 
     dos.writeBytes(lineEnd); 
     dos.writeBytes(globalUID); 

और सर्वर पक्ष पर मैं php का उपयोग कर रहा हूं। यहां बताया गया है कि मैं उस पैरामीटर को पाने का प्रयास कर रहा हूं

$param = $_POST["paramName"]; 
target_path1 = "./places_photos/" . $param; 

लेकिन मेरा वर्तमान कोड फ़ाइल अपलोड करता है लेकिन यह पैरामीटर नहीं भेजता है। मैं पैरामीटर कैसे भेज सकता हूं और मैं उन्हें सर्वर की ओर कैसे प्राप्त कर सकता हूं?

अद्यतन

वर्तमान में, छवि places_photos निर्देशिका जो $target_path1 चर में बताया गया है में सहेजा गया है। मैं चाहता हूं कि उस छवि को उपयोगकर्ता की निर्देशिका में सहेजना है और उस निर्देशिका को उपयोगकर्ता आईडी के रूप में नामित किया गया है। लेकिन दुर्भाग्य से मुझे सर्वर की ओर उपयोगकर्ता आईडी नहीं मिल रहा है। मैं फ़ाइल के साथ सर्वर पर उपयोगकर्ता आईडी कैसे भेज सकता हूं?

उत्तर

0

होनी चाहिए एक और lineEnd इस के बाद कहा:

dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd); 
    dos.writeBytes(lineEnd); 
    dos.writeBytes(globalUID); 
    dos.writeBytes(lineEnd); <-- add this 

यह भी सुनिश्चित करें कि आप बहुखण्डीय सीमा (लाइन से प्रारंभ होने वाले '-') के अंत में जोड़ कर आपके मामले में, इस जोड़ें:

dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 
+0

यह या तो काम नहीं कर रहा php कोड पर इस लाइन को जोड़ने। कोई अन्य समाधान? – 2619

+0

क्या आप फायरबग, या वायर्सहार्क जैसे टूल का उपयोग कर सकते हैं और पता लगा सकते हैं कि सर्वर पर फ़ॉर्म पोस्ट क्या भेजा जा रहा है? बहु-भाग/फॉर्म-डेटा नई लाइनों और सीमा के बारे में बहुत ही जटिल है 100% सही है। – azgolfer

0

क्या आप php को "फ़ाइल" बनाना चाहते हैं, अपना फ़ाइल नाम जानते हैं ?? यदि आपका उत्तर हाँ है, तो आप अपने कोड पर कुछ बदलाव कर सकते हैं।

(मैं मान लें कि आपके अधिकतम आकार के एक बफर बनाया है और फ़ाइल को पढ़ने और यह रूप में लिखना है)

पहला परिवर्तन आप इस की जरूरत नहीं है भेजने के लिए paramName:

//Sending data 
dos.writeBytes(twoHyphens + boundary + lineEnd); 
dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd); 
dos.writeBytes(lineEnd); 
dos.writeBytes(globalUID); 

बस करो इस:

0123:

dos.writeBytes(lineEnd); 
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

और अपने php में, अपना कोड बदलें

को
$param = basename($_FILES['uploaded_file']['name']); 

आप जाँच कर सकते हैं this लेख

+0

मैं सर्वर पर पैरामीटर भेजना चाहता हूं। मेरा php पहले से ही फ़ाइल के फ़ाइल नाम को जानता है। – 2619

+0

यदि आप सर्वर पर पैरामीटर भेजना चाहते हैं तो आप एचटीपी क्लाइंट – yosafatade

0

उस में उपयोगकर्ता आईडी के साथ एक कुकी सेट करें। सर्वर पर आप कुकी को पुनर्प्राप्त कर सकते हैं और उपयोगकर्ता आईडी जांच सकते हैं। (हालांकि ध्यान दें कि यह सुरक्षित नहीं है और न ही उपयोगकर्ता आईडी पैरामीटर पास कर रहा है)

+0

के साथ एक HTTP POST अनुरोध निष्पादित कर सकते हैं जो आप उल्लेख करते हैं कि यह एक विकल्प है लेकिन यह ऐप आवश्यकता फ़ाइल अपलोड के साथ सर्वर को पैरामीटर भेजना है। :( – 2619

0

आपका कोड थोड़ा उलझन में है, अपने चर को दोबारा जांचें ... उदाहरण के लिए आपके target_path1 के सामने $ $ नहीं है, यह देखने के लिए जांचें कि कोई भी अन्य सेवर चर के किसी भी वैध आउटपुट लौटते हैं।

यदि सभी विफल हो जाते हैं, तो आप फ़ाइल नाम में पैरामीटर समेत फ़ाइल का नाम बदल सकते हैं और पैरामीटर निकालने के बाद सर्वर पक्ष पर फिर से नाम बदल सकते हैं।

0

यह बहुत आसान है ...100% कामकाजी समाधान

यूआरएल में पैरामीटर भेजने के लिए यूटीएफ -8 का उपयोग करें। इस लाइन

// open a URL connection to the Servlet 
       FileInputStream fileInputStream = new FileInputStream(sourceFile); 
       URL url = new URL("http://your fileaddress.php***?yourphpsideparametername="+URLEncoder.encode(yourperameter, "UTF-8")*** ); 

तो जोड़ने दूसरा कनेक्शन अनुरोध

   conn.setRequestMethod("POST"); 
       ***conn.setRequestProperty("Accept-Charset", "UTF=8");*** 
       conn.setRequestProperty("Connection", "Keep-Alive"); 

में इस लाइन को जोड़ने के

$yourperameter =$_GET['yourparameter']; 
    $file_path = "doc/".$yourperameter."/"; 

    $file_path = $file_path . basename($_FILES['uploaded_file']['name']); 
    $title =$_FILES['title']; 
    //$descr=$file_path . basename($_FILES['uploaded_file']['desc']); 

    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { 
     echo "success"; 
    } else{ 
     echo "fail"; 
    } 
संबंधित मुद्दे