2008-11-04 13 views
9

का उपयोग कर फ़ाइल सर्वर पर फ़ाइलों को अपलोड करना वर्तमान में मेरे पास एक ऐसा एप्लिकेशन है जो मेरे वेब एप्लिकेशन से अपलोड की गई फ़ाइल प्राप्त करता है। अब मुझे उस फ़ाइल को एक फ़ाइल सर्वर पर स्थानांतरित करने की आवश्यकता है जो एक ही नेटवर्क पर स्थित होता है (हालांकि यह हमेशा मामला नहीं हो सकता है)।वेब क्लाइंट क्लास

मैं सी # .NET में वेब क्लाइंट क्लास का उपयोग करने का प्रयास कर रहा था।

string filePath = "C:\\test\\564.flv"; 
    try 
    { 
     WebClient client = new WebClient(); 

     NetworkCredential nc = new NetworkCredential(uName, password); 

     Uri addy = new Uri("\\\\192.168.1.28\\Files\\test.flv"); 
     client.Credentials = nc; 
     byte[] arrReturn = client.UploadFile(addy, filePath); 
     Console.WriteLine(arrReturn.ToString()); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

1 9 2.168.1.28 पर स्थित मशीन एक फ़ाइल सर्वर है और इसमें एक शेयर सी: \ फ़ाइलें हैं। अभी तक मुझे लॉगिन की त्रुटि प्राप्त हो रही है खराब उपयोगकर्ता नाम या पासवर्ड विफल रहा है, लेकिन मैं एक्सप्लोरर खोल सकता हूं और उस पथ लॉगिन में सफलतापूर्वक टाइप कर सकता हूं। मैं दूरस्थ डेस्कटॉप का उपयोग करके भी लॉगिन कर सकता हूं, इसलिए मुझे पता है कि उपयोगकर्ता खाता काम करता है।

इस त्रुटि पर कोई विचार? क्या फ़ाइल को सीधे इस तरह स्थानांतरित करना संभव है? वेब क्लाइंट कक्षा या शायद कुछ अन्य वर्ग के साथ?

+0

खाता एक डोमेन खाता है, या एक मशीन खाता है? – TheSoftwareJedi

+0

खाता मशीन पर एक उपयोगकर्ता है। मुद्दा यह है कि हम एक नए आर्किटेक्चर में जा रहे हैं और हमारे पास 2 फाइल सर्वर क्लस्टर्ड हैं और वर्चुअल आईपी के साथ संतुलित लोड हैं। इसलिए मुझे वीआईपी को फाइल भेजने में सक्षम होना चाहिए। – JustLogic

+1

यदि मैं किसी पृष्ठ पर पोस्ट करता हूं तो मुझे वेब क्लाइंट कार्यों का उपयोग करना पता है। लेकिन मैं उस से बचना चाहता हूं और फ़ाइल को सीधे स्थानांतरित करना चाहता हूं। क्या ऐसा करने के लिए कोई रास्ता है? – JustLogic

उत्तर

16

बस का उपयोग

File.Copy(filepath, "\\\\192.168.1.28\\Files"); 

एक खिड़कियों fileshare एक यूएनसी पथ के माध्यम से अवगत कराया फाइल सिस्टम के भाग के रूप में व्यवहार किया जाता है, और वेब से कोई संबंध नहीं है।

उपयोग किए गए प्रमाण-पत्र एएसपी.NET कार्यकर्ता प्रक्रिया, या आपके द्वारा सक्षम किए गए किसी भी प्रतिरूपण का होगा। यदि आप इसे सही करने के लिए उनको ट्विक कर सकते हैं, तो यह किया जा सकता है।

आप समस्याओं में भाग ले सकते हैं क्योंकि आप सर्वर नाम के बजाय आईपी पता का उपयोग कर रहे हैं (विंडोज ट्रस्ट सेटिंग्स डोमेन छोड़ने से रोकती हैं - आईपी का उपयोग करके आप किसी भी डोमेन विवरण छुपा रहे हैं)। यदि संभव हो, तो सर्वर का नाम उपयोग करें!

यदि यह एक ही विंडोज़ डोमेन में नहीं है, और आप एक अलग डोमेन खाते का उपयोग करने की कोशिश कर रहे हैं, आप के रूप में "[domain_or_machine] \ [उपयोगकर्ता नाम]"

आप की जरूरत है उपयोगकर्ता नाम निर्दिष्ट करना होगा स्पष्ट प्रमाण-पत्र निर्दिष्ट करने के लिए, आपको coding an impersonation solution पर देखना होगा।

+0

शायद यह अनुमतियों के कारण काम नहीं करेगा। वह System.IO.File.Copy का उपयोग केवल तभी कर सकता है जब वह उस उपयोगकर्ता के तहत वेबसाइट चलाए जिसके पास आवश्यक अनुमतियां हों। डिफ़ॉल्ट रूप से सुरक्षा समस्या से बचने के लिए वेब एप्लिकेशन स्थानीय, सीमित उपयोगकर्ता के अंतर्गत चल रहा है। – Biri

+0

कुछ अनुमति विवरण जोड़ा गया। सहमत - अनुमतियां मुश्किल हो सकती हैं। – TheSoftwareJedi

+0

@TheSoftwareJedi क्या यह संभव है कि मैं फ़ाइल को सर्वर पर संग्रहीत किए बिना फ़ाइल सर्वर पर स्थानांतरित कर सकता हूं जहां फ़ाइल प्रारंभ में वेब पेज से अपलोड की गई थी? – Alex

0

जब आप मैन्युअल रूप से आईपी पता खोलते हैं (रन कमांड या नेटवर्क ड्राइव मैपिंग के माध्यम से), तो आपका पीसी पाइप पर आपके क्रेडेंशियल्स भेज देगा और फ़ाइल सर्वर को डीसी से प्राधिकरण प्राप्त होगा।

जब एएसपी.Net कोशिश करता है, तो यह आईआईएस कार्यकर्ता उपयोगकर्ता का उपयोग करने की कोशिश करने जा रहा है (जब तक प्रतिरूपण चालू नहीं होता है, जो कुछ अन्य मुद्दों की सूची देगा)। पारंपरिक रूप से, आईआईएस कार्यकर्ता उपयोगकर्ता के पास सर्वर्स (या वेब सर्वर पर अन्य फ़ोल्डरों में) काम करने का अधिकार नहीं है।

3
namespace FileUpload 
{ 
public partial class Form1 : Form 
{ 
    string fileName = ""; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     string path = ""; 
     OpenFileDialog fDialog = new OpenFileDialog(); 
     fDialog.Title = "Attach customer proposal document"; 
     fDialog.Filter = "Doc Files|*.doc|Docx File|*.docx|PDF doc|*.pdf"; 
     fDialog.InitialDirectory = @"C:\"; 
     if (fDialog.ShowDialog() == DialogResult.OK) 
     { 
      fileName = System.IO.Path.GetFileName(fDialog.FileName); 
      path = Path.GetDirectoryName(fDialog.FileName); 
      textBox1.Text = path + "\\" + fileName; 

     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      WebClient client = new WebClient(); 

      NetworkCredential nc = new NetworkCredential("erandika1986", "123"); 

      Uri addy = new Uri(@"\\192.168.2.4\UploadDocs\"+fileName); 

      client.Credentials = nc; 
      byte[] arrReturn = client.UploadFile(addy, textBox1.Text); 
      MessageBox.Show(arrReturn.ToString()); 

     } 
     catch (Exception ex1) 
     { 
      MessageBox.Show(ex1.Message); 
     } 
    } 
} 
} 
संबंधित मुद्दे