FileUpload to FileStream

前端 未结 4 1864
孤独总比滥情好
孤独总比滥情好 2020-11-30 06:48

I am in process of sending the file along with HttpWebRequest. My file will be from FileUpload UI. Here I need to convert the File Upload to filestream to send the stream al

相关标签:
4条回答
  • 2020-11-30 07:26

    Might be better to pipe the input stream directly to the output stream:

    inputStream.CopyTo(outputStream);
    

    This way, you are not caching the entire file in memory before re-transmission. For example, here is how you would write it to a FileStream:

    FileUpload fu;  // Get the FileUpload object.
    using (FileStream fs = File.OpenWrite("file.dat"))
    {
        fu.PostedFile.InputStream.CopyTo(fs);
        fs.Flush();
    }
    

    If you wanted to write it directly to another web request, you could do the following:

    FileUpload fu; // Get the FileUpload object for the current connection here.
    HttpWebRequest hr;  // Set up your outgoing connection here.
    using (Stream s = hr.GetRequestStream())
    {
        fu.PostedFile.InputStream.CopyTo(s);
        s.Flush();
    }
    

    That will be more efficient, as you will be directly streaming the input file to the destination host, without first caching in memory or on disk.

    0 讨论(0)
  • You can't convert a FileUpload into a FileStream. You can, however, get a MemoryStream from that FileUpload's PostedFile property. You can then use that MemoryStream to fill your HttpWebRequest.

    0 讨论(0)
  • 2020-11-30 07:43

    You can put a FileUpload file directly into a MemoryStream by using FileBytes (simplified answer from Tech Jerk)

    using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes))
    {
        //do stuff 
    }
    

    Or if you do not need a memoryStream

    byte[] bin = FileUpload1.FileBytes;
    
    0 讨论(0)
  • 2020-11-30 07:45

    Since FileUpload.PostedFile.InputStream gives me Stream, I used the following code to convert it to byte array

    public static byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[input.Length];
        //byte[] buffer = new byte[16 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }
    
    0 讨论(0)
提交回复
热议问题