PHP/curl का उपयोग करके मैं एक वेबसाइट में लॉग इन करता हूं और फ़ाइल अपलोड करने का प्रयास करता हूं। यह त्रुटि संदेश देता है, "त्रुटि: फ़ाइल अपलोड संसाधित नहीं है। कृपया सुनिश्चित करें कि निर्दिष्ट टेम्पलेट प्रारूप में लागू एक्सेल फ़ाइल अपलोड के लिए चुना गया है।" यह त्रुटि संदेश से अलग है यदि मैं ब्राउज़र से अपलोड करता हूं और इसे गलत प्रारूप (जैसे .jpg) की फ़ाइल देता हूं।जेएसपी स्क्रिप्ट पर अपलोड PHP cURL फ़ाइल विफल रहता है। ब्राउज़र के माध्यम से अपलोड की गई एक ही फ़ाइल
यदि मैं फ़ायरफ़ॉक्स के माध्यम से एक ही एक्सेल फ़ाइल अपलोड करता हूं तो यह सर्वर द्वारा काम करता है और स्वीकार किया जाता है।
तो मैं फ़ायरफ़ॉक्स के साथ PHP/curl के माध्यम से यह काम कैसे कर सकता हूं?
मैंने अपनी खुद की PHP स्क्रिप्ट पर एक ही अपलोड की कोशिश की और यह भी ठीक काम करता है। मैंने यहां कुछ प्रासंगिक प्रश्नों की भी समीक्षा की और विभिन्न चीजों की कोशिश की, जिनमें से कोई भी कोई फर्क नहीं पड़ता। मैंने MIME प्रकार के साथ और बिना विकल्पों के साथ और बिना CURLOPT_SSL_VERIFYPEER और CURLOPT_HTTPHEADER के प्रयास किए।
वेबसाइट का मालिक विशेष रूप से सहायक नहीं था, केवल मुझे बता रहा था कि अन्य लोग इसे कर रहे हैं।
$url = 'https://www.example.com/uploadController_u.jsp';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0");
curl_setopt($ch, CURLOPT_REFERER, $curl_referer);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Added based on another StackOverflow question
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // Added based on another StackOverflow question
// Tried with and without the MIME type
$post_vars = array(
'file' => "@/home/someuser/private/eapis-test/mx/Template-test.xls;type=application/vnd.ms-excel",
'submit' => 'Upload file' );
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vars);
$response = curl_exec($ch);
नीचे दिए गए फॉर्म मैं करने के लिए पोस्ट कर रहा हूँ:
नीचे मेरी कोड है। मुझे जावास्क्रिप्ट में फॉर्म 1 के लिए कोई संदर्भ नहीं मिला।
<table border="0" cellspacing="0" cellpadding="0">
<form action="uploadController_u.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1">
<tr>
<td align="left">
<p>
<h2>Upload Flight:</h2>
</p>
</td>
</tr>
<tr>
<td>
<b style="font-size: 90%;">To add a new flight from spreadsheet, </b>
</td>
<td align="left">
<input name="file" type="file" id="file" align="left" size="36">
<td>
</tr>
<tr>
<td>
</td>
<td align="left">
<p>
<input type="submit" name="Submit" value="Upload file"/>
</p>
</td>
</tr>
</form>
</table>
मैं इन हेडर की कोशिश की बेहतर एक ब्राउज़र अनुकरण करने के लिए है, लेकिन कोई लाभ नहीं हुआ:
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: ";
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
खैर त्रुटि है कि आप प्राप्त सुंदर जानकारीपूर्ण है: 'त्रुटि: फ़ाइल संसाधित नहीं अपलोड करें। कृपया सुनिश्चित करें कि निर्दिष्ट टेम्पलेट प्रारूप में एक लागू एक्सेल फ़ाइल अपलोड के लिए चुना गया है। '। तो मुझे लगता है कि जेएसपी अपलोड की गई फाइल पर परीक्षण का एक सेट कर रहा है। क्या आप वाकई एक्सेल फ़ाइल भेज रहे हैं जो वास्तव में आप जो भी टेम्पलेट चाहते हैं उसके अनुरूप है? – fvu
हां, मैं एक ही फाइल को ब्राउज़र के माध्यम से अपलोड कर सकता हूं और यह काम करता है। – George
एचटीएमएल से '<फॉर्म ...' दिखाएं। अपना प्रश्न अपडेट करें। –