PHP

2010-03-15 7 views
35

में chunking का उपयोग कर 1 जीबी फ़ाइलें अपलोड करें मेरे पास एक वेब एप्लिकेशन है जो 4 एमबी तक फ़ाइल अपलोड स्वीकार करता है। सर्वर साइड स्क्रिप्ट PHP और वेब सर्वर एनजीआईएनएक्स है। कई उपयोगकर्ताओं ने वीडियो अपलोड करने की इजाजत देने के लिए इस सीमा को बड़े पैमाने पर बढ़ाने का अनुरोध किया है।PHP

हालांकि PHP के साथ इस समस्या के लिए कोई आसान समाधान नहीं लगता है। सबसे पहले, क्लाइंट साइड पर मैं कुछ ढूंढ रहा हूं जो मुझे स्थानांतरण के दौरान फ़ाइलों को खंडित करने की अनुमति देगा। SWFUpload ऐसा प्रतीत नहीं होता है। मुझे लगता है कि मैं जावा एफएक्स (http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file) का उपयोग करके अपलोड स्ट्रीम कर सकता हूं लेकिन मुझे PHP में request.getInputStream का कोई समकक्ष नहीं मिल रहा है।

बढ़ाने से ब्राउज़र client_post सीमा या php.ini अपलोड या max_execution बार वास्तव में बहुत बड़ी फ़ाइलों के लिए एक समाधान नहीं है (~ 1GB), क्योंकि हो सकता है ब्राउज़र टाइम आउट और उन सभी स्मृति में संग्रहीत धब्बे के बारे में सोच होगा।

क्या सर्वर की ओर से PHP का उपयोग करके इस समस्या को हल करने का कोई तरीका है? मैं आपके उत्तरों की सराहना करता हूं।

+3

मेरे अनुप्रयोगों में से एक> आपके द्वारा उल्लिखित सर्वर-साइड विकल्पों को कॉन्फ़िगर करके 1 जीबी फ़ाइलों को अपलोड करने की अनुमति देता है। उपयोगकर्ताओं ने कभी भी टाइम आउट या उस तरह की कुछ भी रिपोर्ट नहीं की है। – Dolph

+2

एक अच्छा समाधान हर जगह काम करता है, आईएमएचओ। 1 जीबी फाइल अपलोड करना 56 केबीपीएस मोडेम/धीमी कनेक्शन पर काम नहीं करेगा। एक चंकिंग समाधान बहुत मजबूत होगा और फिर से बाधित लिंक का समर्थन कर सकता है। – rjha94

+0

यहां एक नज़र डालें: https://tus.io/ – sgargel

उत्तर

-2

आप निश्चित रूप से एक वेब ऐप लिख सकते हैं जो डेटा के ब्लॉक (यहां तक ​​कि POST के माध्यम से) स्वीकार करेगा, फिर डेटा के उस ब्लॉक को फ़ाइल में संलग्न करें। ऐसा लगता है कि आपको किसी प्रकार का क्लाइंट साइड एप चाहिए जो फाइल ले लेगा और इसे टुकड़ों में तोड़ देगा, फिर इसे एक समय में अपनी वेब सेवा में एक हिस्सा भेजें। हालांकि, यह एक sftp dir बनाने के लिए बहुत आसान लगता है, और क्लाइंट को कुछ पूर्व-मौजूदा क्लाइंट ऐप का उपयोग करके फ़ाइलों को बस sftp करने दें।

+0

http://code.google.com/p/gigaupload/ – rjha94

+2

हो सकता है कि आप प्रत्येक खंड को गंतव्य फ़ाइल में शामिल न करें, जैसा कि वे अंदर आते हैं। यह संभव है टुकड़ों के आदेश से बाहर निकलने के लिए। हमारे द्वारा उपयोग किए जाने वाले समाधान को प्रत्येक संख्या को संख्यात्मक आईडी के साथ सहेजना है, फिर सभी अपलोड किए जाने के बाद सभी हिस्सों को गठबंधन करें। –

-3

मुझे लगता है कि सर्वर और क्लाइंट के बीच सॉकेट बनाएं और डेटा में डेटा भेजा! .. निम्न स्तर प्रोग्रामिंग

fopen('php://input'); शायद समाधान लगता है .. नहीं दांव

3

हो सकता है "लेकिन मैं PHP में request.getInputStream के किसी भी बराबर नहीं मिल सकता है।"?

+0

कोई php: // multipart फॉर्म डेटा के लिए इनपुट – rjha94

0

कैसे एक जावा एप्लेट Jupload के लिए यहाँ अपलोड करने और पीएचपी प्रसंस्करण के लिए के लिए उपयोग कर ..

आप एक उदाहरण मिल सकता है के बारे में: एक JavaFX ग्राहक http://sourceforge.net/apps/mediawiki/jupload/index.php?title=PHP_Example

+0

लिंक के लिए धन्यवाद। यह संभव होना चाहिए, मैं अभी जावा एफएक्स के साथ कोशिश कर रहा हूं। JUpload स्क्रीनशॉट लगभग 10 साल पहले दिखता है; ओ) – rjha94

+0

हाहा मुझे यकीन नहीं है कि आदमी :) लेकिन PHP कोड बहुत हालिया है .. (कुछ दिन पहले अंतिम अपडेट) आप देख सकते हैं कि वे कैसे चंकिंग करते हैं .. http://jupload.svn.sourceforge.net/viewvc/jupload/trunk/wwwroot/samples.PHP/jupload.php?view=markup – Chris

3

मैं पैदा की है मात्रा में बड़ी फ़ाइलों को भेजने के लिए मूल फ़ाइल में भाग को इकट्ठा करने के लिए अधिकतम पोस्ट आकार (मैं 2 एमबी का उपयोग कर रहा हूं) और एक PHP रिसीवर स्क्रिप्ट का। मैं यहां अपाचे लाइसेंस के तहत कोड जारी कर रहा हूं: http://code.google.com/p/gigaupload/ उपयोग/संशोधित/वितरित करने के लिए स्वतंत्र महसूस करें।

+0

यदि आपकी समस्या हल हो गई है तो संकोच न करें और इसे उत्तर के रूप में चिह्नित करें ;-) –

10

plupload एक जावास्क्रिप्ट/PHP लाइब्रेरी है, और इसका उपयोग करना काफी आसान है और चंकिंग की अनुमति देता है।

हालांकि यह HTML5 का उपयोग करता है।

+0

उल्लेखनीय है कि औसत समय में यह एचटीएमएल 4, सिल्वरलाइट और फ्लैश का भी समर्थन करता है, जैसा कि यहां देखा जा सकता है [http://www.plupload.com/example_all_runtimes.php)। – jdepypere

2

bigupload स्क्रिप्ट का उपयोग करने का प्रयास करें। इसे एकीकृत करना बहुत आसान है और भाग में 2 जीबी तक अपलोड कर सकता है। खंड आकार अनुकूलन योग्य है।

+1

लिंक मर चुका है – machineaddict

1

tus protocol पर एक नज़र डालें जो कि पुनः फ़ाइल करने योग्य फ़ाइल अपलोड के लिए एक HTTP आधारित प्रोटोकॉल है ताकि आप किसी भी बाधा के मामले में फिर से पूरे डेटा को दोबारा अपलोड किए बिना छोड़ सकें। यह प्रोटोकॉल मई, 2017 से adopted by vimeo भी रहा है।

आप विभिन्न भाषाओं में प्रोटोकॉल के विभिन्न कार्यान्वयन here देख सकते हैं। अपने मामले में, आप uppy नामक अपने जावास्क्रिप्ट क्लाइंट का उपयोग कर सकते हैं और सर्वर में golang या php आधारित सर्वर कार्यान्वयन का उपयोग कर सकते हैं।