Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    6

    errore upload file con webservice soap e chiamata tramite form enctype="multipart/form-data"

    salve ho realizzato un webservice soap che effttua l'upload di un file che gli viene passato come parametro di tipo byte[] e una stringa rappresentativa una data, se chiamo il webservice con un client asp.net scritto in c# tutto vabene se invece lo chiamo con una semplice pagina html con method post e enctype="multipart/form-data" ottengo il seguente errore Request format is invalid: multipart/form-data; boundary=---------------------------223131701931059.


    il metodo del webservice è:

    codice:
    public System.Xml.XmlDocument setBollettini(Byte[] Bollettinosett, string Dtsettim)
    {
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                stringa = "";
    
                string strdocPath = @ConfigurationManager.AppSettings["pathpdflocal"];
                String ret = convertiData(ref Dtsettim, "P08");
    
                if (ret != "OK") 
                {
                    writeLog();
                    doc.LoadXml(stringa);
                    return doc;
                    //---------
                }
    
                try
                {
                    strdocPath = strdocPath + Dtsettim + ".pdf";
                    FileStream objfilestream = new FileStream(strdocPath, FileMode.Create, FileAccess.ReadWrite);
                    objfilestream.Write(Bollettinosett, 0, Bollettinosett.Length);
                    objfilestream.Close();
    mentre la pagina html che lo invoca è:

    codice:
    <form action="http://dominio.webservice.it/ws_upload.asmx/setBollettini" method="post" enctype="multipart/form-data">
        Bollettino settimanale: <input type="file" name="Bollettinosett"/>
        <br/><br/>
        Bollettino giornaliero: <input type="file" name="Bollettinogiorn"/>
        <br/><br/>
        Data inizio settimana.: <input type="text" name="Dtsettim" />
        <input type="submit" value="submit">
    qualcuno può essermi di aiuto poichè di fatto il webservice funziona
    grazie
    Ultima modifica di MItaly; 06-09-2016 a 00:49 Motivo: Tag CODE, indentazione

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    6
    ho provato a modificare il parametro Bollettinoset d aarray di byte a string e poi ho trasfoemato nel metodo in array di byte

    codice:
    byte[] buffer = new byte[Bollettinosett.Length * sizeof(char)];
    System.Buffer.BlockCopy(Bollettinosett.ToCharArray(), 0, buffer, 0, buffer.Length);
    
    FileStream objfilestream = newFileStream(strdocPath, FileMode.Create, FileAccess.ReadWrite);
    
    objfilestream.Write(buffer, 0, buffer.Length);
    
    objfilestream.Close();
    in questo caso non va in errore ma il file pdf che avevo allegato risulta corrotto nella cartella di destinazione
    Ultima modifica di MItaly; 06-09-2016 a 00:50 Motivo: Tag CODE, indentazione

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    6
    Alla fine ho risolto modificando il codice del metodo ho tolto i parametri in esso definiti e ho intercettato direttamente i parametri provenienti dal form all'interno del metodo con la classe HttpContext in altre parole posto una parte del codice:

    codice:
    public System.Xml.XmlDocument setBollettini()
    {
        HttpContext postedContext = HttpContext.Current;
        HttpFileCollection Files = postedContext.Request.Files;
        string fileName =(string)postedContext.Request.Form["Bollettinosett"];
        string Dtsettim =(string)postedContext.Request.Form["Dtsettim"];
    
        byte[] binaryWriteArray = new byte[Files[0].InputStream.Length];
    
        Files[0].InputStream.Read(binaryWriteArray, 0,(int)Files[0].InputStream.Length);
    
        strdocPath = strdocPath + Dtsettim + ".pdf";
        FileStream objfilestream = new FileStream(strdocPath, FileMode.Create, FileAccess.ReadWrite);
        objfilestream.Write(binaryWriteArray, 0,binaryWriteArray.Length);
        objfilestream.Close();
    soltanto che vorrei soltanto una conferma sulla ipotesi di questa diversa impostazione ovvero
    se chiamo un webservice da form con enctype="multipart/form-data" i parametri definiti del metodo non vengono passati e per euesto bisogna ricorerre HttpContext eper poi eseguire una lettura dello stream?
    Ultima modifica di MItaly; 06-09-2016 a 00:51 Motivo: Tag CODE, indentazione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.