2014-07-21 10 views
6

का उपयोग कर फ़ाइल अपलोड करें मैं जावा डेस्कटॉप एनवी पर नैनो एचटीटीपी वेबसर्वर 2.1.0 का उपयोग कर रहा हूं। (कोई Android)नैनो एचटीटीपीडी: एचटीएमएल फॉर्म (POST)

सब कुछ ठीक काम कर रहा है ... लेकिन POST विधि का उपयोग नहीं कर फाइल अपलोड (PUT रूपों के साथ समर्थित नहीं है)

यहाँ मेरी एचटीएमएल कोड है:

<form method="post" enctype="multipart/form-data"> 
    choose a file<br> 
    <input name="file" type="file" size="50" maxlength="100000""> 
    <button type="submit">upload</button> 
</form> 

और

public Response serve(IHTTPSession session) { 
    if (session.getMethod() == Method.POST) { 
     Map<String, String> files = new HashMap<String, String>(); 
     session.parseBody(files); 
     //this prints {file=C:\path-to-java-tmp-files\NanoHTTPD-4635244586997909485} 
     //the number is always different 
     System.out.println(files.toString()); 
    } else { 
     //page containing the index.html including the form 
     return page; 
    } 
} 

और यहाँ समस्या है: अस्थायी-फ़ाइल मौजूद नहीं है यहाँ अपने सर्वर methode है। मौजूदा अंत में एक अलग "संख्या" वाला एक और अस्थायी फ़ाइल है और यह सही फ़ाइल प्रतीत होती है, क्योंकि सामग्री अपलोड की गई फ़ाइल की सामग्री के समान ही है। तो सही अस्थायी फ़ाइल नाम कैसे प्राप्त करें?

एक और समस्या है:

-----------------------------115801144322347 
Content-Disposition: form-data; name="file"; filename="filename.txt" 
Content-Type: application/octet-stream 

-->content of the uploaded file 


-----------------------------115801144322347-- 

यह एक समस्या है अगर सामग्री एक तस्वीर या एक द्विआधारी है: अस्थायी फ़ाइल छेद पोस्ट सामग्री है।

ऐसा लगता है कि नैनो एचटीटीपीडी पोस्ट अनुरोध के साथ कोई स्पीज़ियल नहीं करता है। यह हमेशा वही करता है ... एक tmp-file को अनुरोध सहेज रहा है और एक पृष्ठ की सेवा कर रहा है। तो: - सही temp-file कैसे प्राप्त करें? -> मुझे लगता है कि यह एक बग है। मुझे सही पथ और नाम मिल रहा है, लेकिन "संख्या" टूट गई है। idk ... अगर अपलोड होता है तो मैं अस्थायी रूप से जावा tmp-path को बदलना चाहिए और फिर हमेशा फ़ाइल को हटा देना चाहिए। तो मेरे पास केवल एक tmp-file किसी भी नामकरण से स्वतंत्र है? - फ़ाइल

से HTML अनुरोध शीर्षलेख को कैसे मारें या मैं कुछ गलत कर रहा हूं? क्या यह nanohttpd में फ़ाइलों को अपलोड करने का सही तरीका है? आपकी सहायता के लिए

thx!

+0

मुझे पता है कि आपने जुलाई में पोस्ट किया था, लेकिन क्या आपको कभी समाधान मिला? मुझे दूषित पीएनजी फाइलें मिल रही हैं क्योंकि नैनो एचटीपीडी बाइनरी फाइलों के लिए भी readLine() का उपयोग करता है – twig

+0

कोई नहीं। मुझे कोई समाधान नहीं मिला :(मैंने अभी छोड़ दिया। – user3796786

उत्तर

3

मुझे यह पता चला कि "क्या आपको कोई फिक्स मिला?" सवाल, लेकिन जब तक आप आज जवाब नहीं देते तब तक इसे पोस्ट करना भूल गए।

<form method="post" enctype="multipart/form-data" action="http://whatever.com/path/"> 
    <input type="file" name="file" /> 
    <input type="hidden" name="extra_data" value='blah blah blah' /> 
    <input type="submit" value="Send" /> 
</form> 

और जावा कोड:

if (session.getMethod() == Method.POST) { 
    try { session.parseBody(files); } 
    catch (IOException e1) { e1.printStackTrace(); } 
    catch (ResponseException e1) { e1.printStackTrace(); } 

    extraData = session.getParms().get("extra_data"); 
    File file = new File(files.get("file")); 
} 

महत्वपूर्ण बात यह डेटा आपको भेज रहे हैं फ़ाइल डेटा, फ़ाइल नाम और फ़ाइल माइम प्रकार के साथ आता है।

मेरे मामले में, मैं पोस्ट करने के लिए पायथन अनुरोध का उपयोग कर रहा था और इसे पर्याप्त डेटा नहीं भेज रहा था। सही पद संरचना होगा:

file_data = { 'file': ('test.png', open('../some_file.png', 'rb'), 'image/png') } 
requests.post("http://whatever.com/path", data = { 'extra_data': "blah blah blah" }, files = file_data) 

कोड के ऊपर "some_file.png" से पढ़ता है, लेकिन सर्वर यह "test.png" कहा जाता है बताता है।

आशा है कि मदद करता है!

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