2013-01-28 28 views
7

तो मैं एंड्रॉइड डिवाइस से विंडोज साझा फ़ोल्डर में एक फाइल लिखने की कोशिश कर रहा हूं। मैं जेसीआईएफएस के नवीनतम संस्करण का उपयोग कर रहा हूं और code which displays available network shares ठीक काम करता है। तो मुझे लगता है सब कुछ JCIFS साथ और मेरे लैन, वाईफाई आदि के साथ ठीक है यहाँ फाइल अपलोड (वास्तव में मैं सिर्फ एक फ़ाइल के लिए एक पाठ सिरिंग लिखना चाहते हैं) के लिए कोड है: के बाद से यूआरएल लॉग होता हैसांबा/जेसीआईएफएस मुद्दे का उपयोग करके फ़ाइल लिखें/अपलोड करें (SmbAuthException: एक्सेस अस्वीकार कर दिया गया है)

public boolean save2Samba(String text, String fileName) { 
     try { 

      // My Windows shares doesn't require any login/password 
      // String name="login";//my windows username 
      // String password="password1";//my windows password 

      // sSambaFolder contains a path like MYPC/E/SharedFolderName/ 
      String url = "smb://" + sSambaFolder.toLowerCase()+fileName; 

      SmbFile file = null; 
      try { 
       // assume ANONYMOUS is my case but there is no description of this in JCIFS API 
       NtlmPasswordAuthentication auth = NtlmPasswordAuthentication.ANONYMOUS; 
       file = new SmbFile(url, auth); 
       android.util.Log.i("TestApp",url); 
       // output is like smb://mypc/e/sharedfoldername/file.txt; 
       SmbFileOutputStream out = new SmbFileOutputStream(file); 
       out.write(text.getBytes()); 
       out.flush(); 
       out.close(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
       return false; 
      } 

      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

मुझे यकीन है कि यह सही है (मैंने ऊपर वर्णित कोड का उपयोग करके यूआरएल की भी जांच की है और यह फ़ोल्डर के कंटेनर को ब्राउज़ करता है)।
लेकिन समस्या यह इम हमेशा एक ही हो रही है:

W/System.err(3214): jcifs.smb.SmbAuthException: Access is denied. 

शेयरों पासवर्ड से सुरक्षित नहीं हैं, तो मैं पहुंच पाने के लिए किसी भी उपयोगकर्ता नाम/पासवर्ड की जरूरत नहीं है। मैं अन्य WinPC से फ़ाइलों को पढ़/लिख/हटा सकता हूं और कोई प्राधिकरण आवश्यक नहीं है। इसके अलावा मैंने शेयरों के साथ WinPC पर उपयोगकर्ता के लिए पासवर्ड बनाने का प्रयास किया लेकिन परिणाम वही था। इसलिए मैं कोई भाग्य के साथ NtlmPasswordAuthentication के कई संस्करण की कोशिश की:

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(""); 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(":"); 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator:"); //actual username on WinPC with shares 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator"); 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"Administrator",""); 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"",""); 

तो क्या मैं गलत कर रहा हूँ और कैसे मेरा लक्ष्य हासिल करने के लिए जब कोई प्रमाणन साझा फ़ोल्डर तक पहुँच प्राप्त करने की आवश्यकता है?
बीटीडब्ल्यू मेरा सैमसंग टीवी जो लिनक्स आधारित है और सांबा क्लाइंट का उपयोग करता है, उसी समस्या वाले फ़ोल्डर को एक्सेस नहीं करता है और वहां से एमपी 3 चलाता है (ठीक है, हाँ, यह केवल पढ़ता है)। चूंकि मेरा एओएस डिवाइस वाईफाई के माध्यम से मेरे लैन तक पहुंच रहा है (टीवी के बजाय जो ईथरनेट के माध्यम से जुड़ा हुआ है) मैंने नोटबुक + वाईफाई का उपयोग करके साझा फ़ोल्डर तक पहुंच की भी जांच की और कोई समस्या नहीं मिली।
जोड़ा गया:
मैं निम्नलिखित लाइनों को निष्पादित करने के लिए अब कोशिश कर रहा हूँ:

file = new SmbFile(url, auth); 
android.util.Log.i("save2Samba", "file.exists(): " + file.exists()); 

और एक ही प्रवेश निषेध हो रही। मैं भी फ़ाइल में लिखने के लिए नहीं की कोशिश कर रहा हूँ ...

उत्तर

10

ओएमजी फ़ोल्डर को लिखने की अनुमति दी है !!! समाधान इतना आसान था !!! नेटवर्क जो लॉग इन नहीं कर रहा है उपयोग करने के लिए/पासवर्ड से सुरक्षित है और इस तरह किसी भी प्राधिकरण की जरूरत नहीं है NtlmPasswordAuthentication.ANONYMOUS नहीं है बल्कि यह है:

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, null, null); 

लानत यह स्पष्ट नहीं था!

+2

से इनकार कर दिया गया है इससे पहले कि आप काम करेंगे इससे पहले आपको विंडोज़ पर अतिथि खाता सक्षम करना होगा। –

+1

मेरे मामले में यह WinXP था और आपको काम करने के लिए सक्रिय होने के लिए अतिथि खाते की आवश्यकता नहीं है (अभी इसे दो बार जांच लिया गया है)। Win7 के लिए यह शायद ऐसा है। नेटवर्किंग के बारे में बात करते हुए Win7 को ट्यून अप करना बहुत मुश्किल हो गया और यही कारण है कि मुझे XP की तुलना में यह पसंद नहीं है। – Stan

2

इस कोड

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", 
          username, password); 
    sharepath = "smb://" + pathtosharefolder + test.txt; 


sFile = new SmbFile(sharepath, auth); 
    SmbFileOutputStream out = new SmbFileOutputStream(file, true); 
    out.write(text.getBytes()); 

यह भी जांच आप फ़ोल्डर पथ है कि आप तक पहुँच रहे हैं का हिस्सा है के साथ प्रयास करें। यह भी जांचें कि उसने

+0

??? क्या यह मेरे कोड की कॉपी-पेस्ट लाइन है? क्या बात है? लिखने की अनुमति दी जाती है और साझा फ़ोल्डर मौजूद है – Stan

+0

वास्तव में मेरी गलती के बारे में खेद है। क्या आप इस कोड के साथ प्रयास कर सकते हैं और कृपया मुझे बताएं – rwe

+0

ठीक है। तो मुझे कोड की पहली पंक्ति में उपयोगकर्ता नाम और पासवर्ड के रूप में उपयोग करने का क्या अनुमान है? जैसा कि मैंने पहले उल्लेख किया है कि कोई प्रमाणीकरण आवश्यक नहीं है इसलिए कोई उपयोगकर्ता और पासवर्ड सेट नहीं किया गया था। – Stan