Hoe stel ik Filestream in via een besturingselement voor bestandsuploads?

Dit is mijn code en het lukt me niet om het bestand dat ik in mijn FileUploadCotrol heb in de FILESTREAM te krijgen.

//The buffer size is set to 2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;

// Opens a file stream (System.IO.FileStream) to read the file to be uploaded
FileStream fs = fileInf.OpenRead();

try
{
   //Stream to which the file to be upload is written
    Stream strm = reqFTP.GetRequestStream();

   //Read from the file stream 2kb at a time
    contentLen = fs.Read(buff, 0, buffLength);

   //Till Stream content ends
    while (contentLen != 0)
    {
       //Write Content from the file stream to the FTP Upload Stream
        strm.Write(buff, 0, contentLen);
        contentLen = fs.Read(buff, 0, buffLength);
    }

   //Close the file stream and the Request Stream
    strm.Close();
    fs.Close();
}

Het lijkt erop dat ik het besturingselement Fileupload moet gebruiken om het vanaf mijn website te doen, maar het lijkt vreemd dat de besturing een stream maakt en geen filestream. Ja, ik ben een bestand aan het FTP-ren.

2
welk type is 'fileInf'? en welk type is 'reqFTP'?
toegevoegd de auteur Glenn Ferrie, de bron
uiteindelijk zul je een MemoryStream moeten gebruiken denk ik. maar heb een beetje meer informatie nodig
toegevoegd de auteur Glenn Ferrie, de bron
sorry ... ik heb geen FTP om dit tegen te testen ... ik moet het onderstaande resultaat nooit testen.
toegevoegd de auteur Glenn Ferrie, de bron
FileInfo fileInf = nieuwe FileInfo (bestandsnaam);
FtpWebRequest reqFTP;
//Maak een FtpWebRequest-object uit de verstrekte URI reqFTP = (FtpWebRequest) FtpWebRequest.Create (nieuwe Uri ("ftp: //" + sFtpId + "/" + fileInf.Name))
Ik geef de bestandsnaam door die ik krijg van het besturingselement fileupload.
toegevoegd de auteur StephanM, de bron
Wow, nog niets vanochtend. Ik zou moeten gaan met de tweestapsaanpak van Microsoft om de controle op de server te zetten en vervolgens vanaf daar FTP? Yuk, zal ISP moeten bellen en kijken of ik ruimte heb voor grote bestanden.
toegevoegd de auteur StephanM, de bron
Welnu, momenteel moet het tweestapsproces nog steeds worden getest met een 100 mg bestand.
toegevoegd de auteur StephanM, de bron

1 antwoord

Hier is een voorbeeldmethode die de twee typen gebruikt die we targeten, FileInfo en FtpWebRequest , als argumenten en gegevensstromen daartussen. Ik geloof dat dit zal werken.

    void UploadFileToFtp(FileInfo file, FtpWebRequest req)
    {
        int buffLength = 2048;

        using (var reader = new BinaryReader(file.OpenRead()))
        {
            using (var writer = new BinaryWriter(req.GetRequestStream()))
            {
                while (reader.PeekChar() > 0) writer.Write(reader.ReadBytes(buffLength));
            }
        }
    }

Ik hoop dat dit helpt!

0
toegevoegd
Ik zal het proberen, ik heb het aan het werk gezet door het tweestapsproces uit te voeren, maar ik zou echt graag willen voorkomen dat iets van deze grootte daar wordt opgeslagen.
toegevoegd de auteur StephanM, de bron
Een fout krijgen ---- De uitvoer char buffer is te klein om de gedecodeerde karakters te bevatten, coderend 'Unicode (UTF-8)' fallback 'System.Text.DecoderReplacementFallback'. Parameternaam: chars Het zet het bestand op de ftp-server maar het is beschadigd.
toegevoegd de auteur StephanM, de bron
Ik was in staat om de fout te elimineren door toe te voegen aan de open ", Encoding.ASCII". Maar het pdf-bestand dat ik aan het laden ben, is nog steeds vuilnis.
toegevoegd de auteur StephanM, de bron
De bestandsgrootte op de server is 82 KB en de PDF moet 613.6 KB zijn
toegevoegd de auteur StephanM, de bron