Results 1 to 6 of 6

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Åêñïåðèìåíòàòîð Nuclear's Avatar
    Join Date: Sep:2004
    Location: Ñîôèÿ, êâ. Ãå(ò)î Ìèëåâ
    Posts: 3,352

    C#, êà÷âàíå íà ôàéë è ïîëó÷àâàíå íà response (ïàê ôàéë)?

    Çäðàâåéòå.
    Èìàì çà öåë äà çàïàçÿ åäèí Stream âúâ ôàéë.
    Ò.å, åäíà ôóíêöèÿ âðúùà êàòî ðåçóëòàò Stream, êîéòî ñ ïîìîùòà íà StreamReader è StreamWriter äà çàïàçÿ âúâ ôàéë.
    Çà öåëòà ñè ïîèãðàõ ñúñ StreamReader è StreamWriter, íî ïîëó÷èõ ñòðàíåí ðåçóëòàò:

    Code:
    StreamReader readfl  = new StreamReader("e:\\1142.rar");
     StreamWriter writefl = new StreamWriter("e:\\1142out.rar");
     String filecontents = readfl.ReadToEnd(); 
     writefl.Write (filecontents);
     readfl.Close();
     writefl.Close();
    Èñêàì çà ïðîáà äà êîïèðàì 1142.rar â 1142out.rar.
    1142.rar å ñ ãîëåìèíà 3MB. Îáà÷å 1142out.rar å öåëè 5.6MB. Äâàòà ôàéëà îñâåí òîâà ñå ðàçëè÷àâàò è âòîðèÿò àðõèâ å íåèçïîëçâàåì. Çàùî ñå ïîëó÷àâà òàêà?
    Last edited by Nuclear; 7th September 2010 at 21:47. Reason: topic change
    Íå îòãîâàðÿì íà íåãðàìîòíè ïîñòîâå. Äà èçòèêàìå HWBG ïàïëà÷òà!

  2. #2
    Âåãàí íà ìåñíà äèåòà XaMaB's Avatar
    Join Date: Nov:2001
    Location: Ñîôèÿ
    Posts: 20,387
    Íà ïðúâ ïîãëåä çàùîòî ÷åòåø binary ôàéë êàòî ñòðèíã
    Ïîñëåäíà ðåäàêöèÿ: èçâúðøåíà îò XaMaB; íà äíåøíà äàòà. 0.42 ñåêóíäè ñëåä ïóñêàíå íà ïîñòà

    In God we Trust (all others must submit a X.509 certificate). Àêî ñïîðèø ñ èäèîò, âåðîÿòíî è òîé ïðàâè ñúùîòî èëè ñè ïîïàäíàë íà ïàðòèåí (íåïúëåí) ÷ëåí

  3. #3
    Registered User
    Join Date: Dec:2007
    Location: Sofia
    Posts: 366
    Õâúðëè åäíî îêî íà FileStream.

  4. #4
    Åêñïåðèìåíòàòîð Nuclear's Avatar
    Join Date: Sep:2004
    Location: Ñîôèÿ, êâ. Ãå(ò)î Ìèëåâ
    Posts: 3,352
    Äîáðå, ìèñëÿ ÷å ñå ñïðàâèõ ñúñ çàïàçâàíåòî íà Stream âúâ ôàéë, îáà÷å íåùî äðóãî ìè ñå ãóáè.
    Åòî êàêâî èñêàì äà íàïðàâÿ:

    Ïîëçâàì åäèí ñàéò çà äåêîäèðàíå íà ðàçíè ôàéëîâå.
    Ò.å, èìà åäíà ôîðìà, â êîÿòî ñå èçáèðà ôàéë. Ñëåä êàòî íàòèñíà Submit è ñúðâúðúò îáðàáîòè ôàéëà, êàòî ðåçóëòàò ïîëó÷àâàì èçõîäåí ôàéë, êîéòî ìîãà äà çàïàçÿ.

    Öåëòà ìè å äà àâòîìàòèçèðàì òîçè ïðîöåñ. Ñïðÿõ ñå íà C# - íàïðàâèõ ïðîãðàìêà, êîÿòî âçèìà çàäàäåí ôàéë, ïðàùà ãî íà ñúðâúðà è èç÷àêâà çà response - èçõîäíèÿ ôàéë, êàòî ñëåä òîâà ãî çàïàçâà íÿêúäå. Ñïåñòÿâà ñå äîñòà, çàùîòî òîâà ïðåðàáîòâàíå èíà÷å òðÿáâà äà ñå ïðàâè ìíîãî ÷åñòî.

    Åòî òîâà å êîäà íà ôóíêöèÿòà, êîÿòî òðÿáâà äà ñâúðøè ðàáîòàòà:

    Code:
        public static void UploadFileEx(string uploadfile, string url, CookieContainer cookies)
            {           
                   
                string fileFormName = "file";
                string  contenttype = "application/octet-stream";            
                string postdata="?";
                Uri uri = new Uri(url + postdata);
                
                string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
                HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
                webrequest.CookieContainer = cookies;
                webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
                webrequest.Method = "POST";
    
    
                // Build up the post message header
    
                StringBuilder sb = new StringBuilder();
                sb.Append("--");
                sb.Append(boundary);
                sb.Append("\r\n");
                sb.Append("Content-Disposition: form-data; name=\"");
                sb.Append(fileFormName);
                sb.Append("\"; filename=\"");
                sb.Append(Path.GetFileName(uploadfile));
                sb.Append("\"");
                sb.Append("\r\n");
                sb.Append("Content-Type: ");
                sb.Append(contenttype);
                sb.Append("\r\n");
                sb.Append("\r\n");
    
                string postHeader = sb.ToString();
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
    
                // Build the trailing boundary string as a byte array
    
                // ensuring the boundary appears on a line by itself
    
                byte[] boundaryBytes =
                       Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
    
                if (!System.IO.File.Exists(uploadfile))
                {
                    MessageBox.Show("file not found");              
                }
                FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read);
                long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length;
                webrequest.ContentLength = length;
    
                Stream requestStream = webrequest.GetRequestStream();
    
                // Write out our post header
    
                requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
    
                // Write out the file contents
    
                byte[] buffer = new Byte[checked((uint)Math.Min(4096,(int)fileStream.Length))];
                int bytesRead = 0;
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)requestStream.Write(buffer, 0, bytesRead);
    
                // Write out the trailing boundary
    
                requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
                try
                {
                    WebResponse resp = webrequest.GetResponse();
                    Stream s = resp.GetResponseStream();
                   int readr = 0;
                    byte[] buffer1 = new byte[32767];
                    FileStream outff = new FileStream(uploadfile + "outsf", FileMode.Create);
    
                    while (true)
                    {
                        readr = s.Read(buffer1, 0, buffer1.Length);
                        if (readr <= 0) break;
                        outff.Write(buffer1, 0, buffer1.Length);
                    }
                    
                    outff.Close();
                 }
                catch (WebException e)
                {
                        MessageBox.Show(e.Message);
                }
               
                
            }
    Ñêðèò/Hidden: êîä


    Îáà÷å ïðîáëåìúò å, ÷å ìîÿòà ïðîãðàìêà ñëåä äúëãî ÷àêàíå äàâà exception "no response. The connection timed out" òî÷íî íà "WebResponse resp = webrequest.GetResponse();"
    Èíà÷å ïðåç áðàóçúð ñúðâúðúò îòãîâàðÿ ïî÷òè âåäíàãà, íî òóê ñå áàâè äîñòà äúëãî.

    Âèæäà ñå, ÷å êà÷âà ôàéëà (èìà upload òðàôèê), íî íåùî íå ìîæå äà âçåìå îòãîâîðà îò ñúðâúðà èëè ñúðâúðà ïðîñòî íå âðúùà íèêàêúâ îòãîâîð.

    Code:
    <form method='post' enctype='multipart/form-data'>
            file to upload: <input type=file name='upfile'><br>
            <input type=submit value='submit'>
    
        </form>
    Ñêðèò/Hidden: file upload form


    Òîâà å ôîðìàòà çà úïëîóä. Ôàéëúò å decoder.py è ðåçóëòàòíèÿò ôàéë ñúùî ñå ãåíåðèðà ïðåç decoder.py (êîãàòî ïðîáâàì ïðåç áðàóçúð). Ëîøîòî å, ÷å ñàéòúò íå å äîñòúïåí îòâñÿêúäå, òàêà ÷å íå ìîãà äà ñè åêïåðèìåíòèðàì âèíàãè.
    Ùå ñå ðàäâàì íà ìíåíèÿ îòíîñíî ãîðíèÿ êîä - äàëè ìîæå äà èçïúëíè ôóíêöèÿòà òî÷íî íà òàçè upload ôîðìà, êàêòî è íà äðóãè âàðèàíòè çà ïðàùàíå íà POST çàÿâêà.

    Àêî íå, èìà è âàðèàíò (ìàêàð è ñúñ sniffer) äà ñðàâíÿ çàÿâêàòà, êîÿòî ïðàùà áðàóçúðà ñúñ çàÿâêàòà, êîÿòî ïðàùà ïðîãðàìêàòà.

    Îçàäà÷àâà ìå òîâà, ÷å òåñòâàõ äâåòå îïåðàöèè ïî îòäåëíî, íî íà äðóã ñúðâúð (1. Êà÷âàíå íà ôàéë è ïðîâåðêà ñ php êàêâî å êà÷åíî (èìå íà ôàéëà è ðàçìåð), 2. Ñâàëÿíå íà ôàéë ÷ðåç èçâèêâàíå íà php script (êîéòî çàäàâà header("Content-Type: application/octet-stream;"))) è óæ âñè÷êî áåøå íàðåä.
    Íå îòãîâàðÿì íà íåãðàìîòíè ïîñòîâå. Äà èçòèêàìå HWBG ïàïëà÷òà!

  5. #5
    Teh AimeR AimeR's Avatar
    Join Date: Dec:2006
    Location: Âðàöà//Ñîôèÿ
    Posts: 4,307
    Ñòðåëÿì â òúìíîòî, íî ùå ïðîáâàì äà ïîìîãíà, âúïðåêè ÷å ñ web-îâå ìíîãî ìíîãî íå ñå çàíèìàâàì...
    Ïðîáâàé äà ñåòíåø HttpWebRequest.TimeOut ïðîïúðòè-òî íà íåùî ñðàâíèòåëíî ãîëÿìî.

    Àêî ïðàâèëíî ðàçáèðàì, ôîðìàòà, êàêòî è öÿëàòà ìàãàðèÿ îêîëî upload-à e â web application. Upload-a íà file îò áðàóçúðà êúì òâîÿ ñúðâúð ìîæå áè ñå ñäóõâà. Ñëåäíèòå entry-òà â web.config-a ïîìàãàò ñ upload-a íà ãîëåìè ôàéëîâå:

    Code:
    <configuration>
    ...
    <system. web>
      <httpRuntime maxRequestLength="102400" executionTimeout= "3600" />
      ...
    </system .web>
    <system.webServer>
    ...
       <security >
         <requestFiltering>
           <requestLimits maxAllowedContentLength="1024000000" />
         </requestFiltering>
       </security>
    </system.webServer> 
    </configuration>
    Ñêðèò/Hidden: Web.config settings for 100MB maximum request length and 1 hour execution timeout
    Last edited by AimeR; 7th September 2010 at 23:17.
    ASUS X570-P|R7 5800X3D@NH-U14S|2X16G DDR4 3200 Corsair VENGEANCE LPX|Samsung 980 PRO 1TB|Radeon RX 7900 XTX 24G|AOC CQ32G1|Corsair RM750x|CM 693

  6. #6
    Åêñïåðèìåíòàòîð Nuclear's Avatar
    Join Date: Sep:2004
    Location: Ñîôèÿ, êâ. Ãå(ò)î Ìèëåâ
    Posts: 3,352
    Ôîðìàòà, êàêòî è ñèñòåìàòà çà îáðàáîòêà íà ôàéëîâå å íà ñúðâúð, îò êîéòî íå ìîãà äà âèäÿ êàêâî òî÷íî ïðàâè ñ êà÷åíèÿ ôàéë. Ñàìî ìîãà äà êà÷à ôàéë è äà ïîëó÷à ðåçóëòàòà (ïàê ôàéë).
    Èñêàì äà íàïðàâÿ Application, êîéòî àâòîìàòè÷íî èçïðàùà ôàéë äî ñúðâúðà è çàïàçâà ðåçóëòàòà.

    Ñåãà êàòî ñå çàãëåäàõ ñúì çàäàë ãðåøíî èìå íà upload ôîðìàòà è ìîæå áè çàòîâà ñúðâúðúò ìúë÷è.

    EDIT: Óæ ãî íàïðàâèõ êàêòî òðÿáâà, íî ïàê íå ñòàâà - ïóñíàõ ïî åäèí Wireshark è ïðàòèõ request ïî äâàòà íà÷èíà (ïðåç ïðîãðàìêàòà è ïðåç áðàóçúðà). Èìà èçâåñòíè ðàçëèêè, òàêà ÷å ïî-êúñíî ùå ãî ïðåðàáîòÿ ïàê.

    ---------- Äîáàâåí ïîñëåäâàù êîìåíòàð â 16:06 ---------- Îðèãèíàëíèÿò êîìåíòàð å ïóñíàò â 10:31 ----------

    È òàêà, ñëåä ìàëêî òåñòâàíå âå÷å ïðîãðàìêàòà ðàáîòè.
    Ñëåä ïðåãëåæäàíå íà ïàêåòè ñ Wireshark ñå îêàçà, ÷å ïðîáëåìèòå áÿõà òðè:
    1. Íà åäíî ìÿñòî èìàøå ñòàòóñ "HTTP/1.1 100 Continue". Íå çíàì, äàëè òî ïðå÷è, íî ãî ïîïðàâèõ ñ "ServicePointManager.Expect100Contin ue = false;" â êîäà.
    2. Ñëåäâàùàòà ðàçëèêà áåøå â êðàÿ íà çàÿâêàòà (ñëåä ôàéëà).
    èçãëåæäàøå òàêà:
    Code:
    ------------------------------8cd1d73689cb354
    à òðÿáâà äà èìà îùå 2 òèðåòà íàêðàÿ.
    3. Ñëåä êàòî ïîïðàâèõ òåçè íåùà, ñúðâúðúò ïî÷íà äà âðúùà ãðåøêà Incorrect Input.
    Âèäÿõ ÷å â íà÷àëîòî íà åäèíèÿ ðåä èìàøå èçëèøåí èíòåðâàë. Ìàõíàõ ãî è âå÷å ñè ïîëó÷àâà ôàéëîâåòå áåç ïðîáëåì.
    Last edited by Nuclear; 8th September 2010 at 11:06.
    Íå îòãîâàðÿì íà íåãðàìîòíè ïîñòîâå. Äà èçòèêàìå HWBG ïàïëà÷òà!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Copyright © 1999-2011 Õàðäóåð ÁÃ. Âúçìîæíî å ñúäúðæàíèåòî íà òàçè ñòðàíèöà äà å îáåêò íà àâòîðñêè ïðàâà.
iskamPC.com | mobility.BG | Bloody's Techblog | Êðèïòîâàëóòè è ìàéíèíã | 3D Vision Blog | Ìàãàçèí çà åëåêòðîííè öèãàðè