Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

Îåêßíçóå áðü ôï ìÝëïò Chrysostomos Kolovos. Τελευταία δημοσίευση από το μέλος Chrysostomos Kolovos στις 13-07-2011, 17:36. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-07-2011, 16:34 66562

    Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Θέλω να κάνω post μια html form με ένα ένα αρχείο επάνω. Ο κώδικας που έχω είναι πάνω κάτω αυτός http://www.briangrinstead.com/blog/multipart-form-post-in-c. Υπάρχει σε πολλές μικρο διαφοροποιημένες εκδόσεις στο web. H εφαρμογή μου έπαιζε μια χαρά μέχρι που κάποια στιγμή πήγαμε να ανεβάσουμε ένα πιο μεγάλο αρχείο. Τα αρχεία είναι Pdf. Δεν ξέρω αν φταίει το μέγεθος, αλλά το αναφέρω. Για να ποστάρω την φόρμα τα φέρνω σε μια μορφή.

    ------WebKitFormBoundaryihfu0Y4sW1HMnVCX
    Content-Disposition: form-data; name="field_1"
    μπλα

    ------WebKitFormBoundaryihfu0Y4sW1HMnVCX
    Content-Disposition: form-data; name="field_file"; filename="c960b55e-bdbb-46fe-9d40-d6f5ed85655a.pdf";
    Content-Type: application/pdf

    %PDF-1.4
    %�쏢
    5 0 obj
    <</Length 6 0 R/Filter /FlateDecode>>
    stream
    mpla mpla  mpla

    (κάποια στιγμή τελειώνει το αρχείο και συνεχίζουν τα πεδία)

    ------WebKitFormBoundaryihfu0Y4sW1HMnVCX
    Content-Disposition: form-data; name="field_2"
    μπλα2

    ο κώδικας για να το φτιάξω είναι ο παρακάτω
    // Add just the first part of this param, since we will write the file data directly to the Stream
    string header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\";\r\nContent-Type: {3}\r\n\r\n",
                            boundary,
                            param.Key,
                            fileToUpload.FileName ?? param.Key,
                            fileToUpload.ContentType ?? "application/octet-stream");
    
    formDataStream.Write(encoding.GetBytes(header), 0, header.Length);
    
    // Write the file data directly to the Stream, rather than serializing it to a string.
    formDataStream.Write(fileToUpload.File, 0, fileToUpload.File.Length);
    
    // Thanks to feedback from commenters, add a CRLF to allow multiple files to be uploaded
    formDataStream.Write(encoding.GetBytes("\r\n"), 0, 2

    Τώρα όταν βάζω το πιο μεγάλο pdf τα πεδία μετά το αρχείο τα τρώει (Δηλαδή πρέπει να μην κλείνει κάπου το αρχείο και μπερδεύονται με τα άλλα στοιχεία). Δοκίμασα να ξανακάνω 3-4 φορές το pdf μήπως ήταν κατεστραμμένο το αρχείο, αλλά τίποτα.






  •  13-07-2011, 16:52 66563 σε απάντηση της 66562

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Για να διαβάσω το αρχείο χρησιμοποιώ το παρακάτω.

    private byte[] LoadFile(string path)
            {
                //// Read file data try 1
                //FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
                //byte[] data = new byte[fs.Length];
                //fs.Read(data, 0, data.Length);
                //fs.Close();
                //return data;
                // Read file data try 2
                byte[] bytes = System.IO.File.ReadAllBytes(path);
                System.IO.File.WriteAllBytes(path, bytes);
    
                return bytes;
            }



  •  13-07-2011, 17:11 66564 σε απάντηση της 66563

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Αυτό το WriteAllBytes τί το θέλεις? Ουσιαστικά διαβάζεις ένα αρχείο και μετά ξαναγράφεις από επάνω του τα ίδια δεδομένα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-07-2011, 17:13 66565 σε απάντηση της 66564

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Ναι δίκιο έχεις τώρα το έβαλα αυτό. Δεν το είδα απ τη ν κούραση. Ουσιαστικά το try1 χρησιμοποιούσα, που σχολίασα.




  •  13-07-2011, 17:15 66566 σε απάντηση της 66565

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Βασικά με το διάβασμα δεν πρέπει να έχω θέμα γιατί έσωσα το αρχείο απ τα byte πριν το κάνω add στο stream και είναι μια χαρά...

  •  13-07-2011, 17:22 66567 σε απάντηση της 66566

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Όπως λέει και ο αρθρογράφος, καλύτερα να χρησιμοποιήσεις κάποιο library όπως το Hammock ή το RestSharp παρά να προσπαθείς να κάνεις debug στον κώδικα που έγραψε κάποιος άλλος, ειδικά όταν δεν έχεις χρόνο να καταλάβεις τί έκανε.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-07-2011, 17:33 66568 σε απάντηση της 66566

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Το έλυσα το λάθος, δεν είχε να κάνει με αυτό που νόμιζα. Η δομή αυτού που έστελνα ήταν μια χαρά. Απλά όταν το παρακολουθούσα απ το fidler δεν το έπαιρνε όλο γιατί ήταν πολύ μεγάλο. 

    Ευχαριστώ 


  •  13-07-2011, 17:36 66569 σε απάντηση της 66567

    Απ: Post html multipart Form(data + file) με χρήση HttpWebRequest - HttpWebResponse

    Παναγιώτης Καναβός:

    Όπως λέει και ο αρθρογράφος, καλύτερα να χρησιμοποιήσεις κάποιο library όπως το Hammock ή το RestSharp παρά να προσπαθείς να κάνεις debug στον κώδικα που έγραψε κάποιος άλλος, ειδικά όταν δεν έχεις χρόνο να καταλάβεις τί έκανε.


    Δεν είχα κάποιο θέμα με το να καταλάβω τι έκανε, και επειδή μου έπαιζε ήταν πολύ περίεργο...


Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems