Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 429875
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T19:49:07+00:00 2026-05-12T19:49:07+00:00

Is there a way to upload a file, save it to a Stream, this

  • 0

Is there a way to upload a file, save it to a Stream, this Stream I will save it temporarily in a Session and, at last, I will try to preview this uploaded file that is in this Session??

For example, a pdf file.

Thanks!!

EDITED

Here’s what I’m trying to do:

HttpPostedFileBase hpf = Request.Files[0] as HttpPostedFileBase;
byte[] buffer = new byte[hpf.InputStream.Length];
MemoryStream ms = new MemoryStream(buffer);
ms.Read(buffer, 0, (int)ms.Length);
Session["pdf"] = ms.ToArray();
ms.Close();

And in another method, I’m doing this:

byte[] imageByte = null;

imageByte = (byte[])Session["pdf"];

Response.ContentType = "application/pdf";
Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(imageByte);

But nothing happends… my browser even opens a nem page to show the pdf file, but a window is shown saying that the file is not a pdf (or something like the file doesn’t initiate with pdf, I didn’t understand that)

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T19:49:08+00:00Added an answer on May 12, 2026 at 7:49 pm

    Sure is. I upload files (PDF/images) to my db in my app. My model object actually stores the file as a byte array but for other functions i have to convert to and from streams so im sure its just as easy to keep it in stream format.

    Here are some code examples (copy n paste) from my app-

    The File object that i use to move files (PDFs / images) around:

    public class File : CustomValidation, IModelBusinessObject
    {
        public int ID { get; set; }
        public string MimeType { get; set; }
        public byte[] Data { get; set; }
        public int Length { get; set; }
        public string MD5Hash { get; set; }
        public string UploadFileName { get; set; }
    }
    

    ..the PdfDoc type specifically for PDF files:

    public class PdfDoc : File
    {
        public int ID { get; set; }
        public int FileID
        {
            get { return base.ID; }
            set { base.ID = value; }
        }
        [StringLength(200, ErrorMessage = "The Link Text must not be longer than 200 characters")]
        public string LinkText { get; set; }
    
    
        public PdfDoc() { }
    
        public PdfDoc(File file)
        {
            MimeType = file.MimeType;
            Data = file.Data;
            Length = file.Length;
            MD5Hash = file.MD5Hash;
            UploadFileName = file.UploadFileName;
        }
    
        public PdfDoc(File file, string linkText)
        {
            MimeType = file.MimeType;
            Data = file.Data;
            Length = file.Length;
            MD5Hash = file.MD5Hash;
            UploadFileName = file.UploadFileName;
    
            LinkText = linkText;
        }
    }
    

    .. an example of an action that receives multi-part POST for file uploading:

        //
        // POST: /Announcements/UploadPdfToAnnouncement/ID
        [KsisAuthorize(Roles = "Admin, Announcements")]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult UploadPdfToAnnouncement(int ID)
        {
            FileManagerController.FileUploadResultDTO files =
                FileManagerController.GetFilesFromRequest((HttpContextWrapper)HttpContext);
            if (String.IsNullOrEmpty(files.ErrorMessage) && files.TotalBytes > 0)
            {
                // add SINGLE file to the announcement
                try
                {
                    this._svc.AddAnnouncementPdfDoc(
                        this._svc.GetAnnouncementByID(ID),
                        new PdfDoc(files.Files[0]),
                        new User() { UserName = User.Identity.Name });
                }
                catch (ServiceExceptions.KsisServiceException ex)
                {
                    // only handle our exceptions
                    base.AddErrorMessageLine(ex.Message);
                }
            }
    
            // redirect back to detail page
            return RedirectToAction("Detail", "Announcements", new { id = ID });
        }
    

    Now you can see i pass the file object to my service here but you can choose to add it to the session and pass an id back to the ‘preview’ view for example.

    Finally, here is a generic action i use to render files out to the client (you could have something similar render the files/stream from the Session):

        //
        // GET: /FileManager/GetFile/ID
        [OutputCache(Order = 2, Duration = 600, VaryByParam = "ID")]
        public ActionResult GetFile(int ID)
        {
            FileService svc = ObjectFactory.GetInstance<FileService>();
    
            KsisOnline.Data.File result = svc.GetFileByID(ID);
    
            return File(result.Data, result.MimeType, result.UploadFileName);
        }
    

    EDIT:
    I noticed i need more samples to explain the above-

    For the upload action above, the FileUploadResultDTO class:

        public class FileUploadResultDTO
        {
            public List<File> Files { get; set; }
            public Int32 TotalBytes { get; set; }
            public string ErrorMessage { get; set; }
        }
    

    And the GetFilesFromRequest function:

        public static FileUploadResultDTO GetFilesFromRequest(HttpContextWrapper contextWrapper)
        {
            FileUploadResultDTO result = new FileUploadResultDTO();
            result.Files = new List<File>();
    
            foreach (string file in contextWrapper.Request.Files)
            {
                HttpPostedFileBase hpf = contextWrapper.Request.Files[file] as HttpPostedFileBase;
                if (hpf.ContentLength > 0)
                {
                    File tempFile = new File()
                    {
                        UploadFileName = Regex.Match(hpf.FileName, @"(/|\\)?(?<fileName>[^(/|\\)]+)$").Groups["fileName"].ToString(),   // to trim off whole path from browsers like IE
                        MimeType = hpf.ContentType,
                        Data = FileService.ReadFully(hpf.InputStream, 0),
                        Length = (int)hpf.InputStream.Length
                    };
                    result.Files.Add(tempFile);
                    result.TotalBytes += tempFile.Length;
                }
            }
    
            return result;
        }
    

    And finally (i hope i have everything you need now) this ReadFully function. It’s not my design. I got it from the net – stream reading can be tricky. I find this function is the most successful way to completely read a stream:

        /// <summary>
        /// Reads data from a stream until the end is reached. The
        /// data is returned as a byte array. An IOException is
        /// thrown if any of the underlying IO calls fail.
        /// </summary>
        /// <param name="stream">The stream to read data from</param>
        /// <param name="initialLength">The initial buffer length</param>
        public static byte[] ReadFully(System.IO.Stream stream, long initialLength)
        {
            // reset pointer just in case
            stream.Seek(0, System.IO.SeekOrigin.Begin);
    
            // If we've been passed an unhelpful initial length, just
            // use 32K.
            if (initialLength < 1)
            {
                initialLength = 32768;
            }
    
            byte[] buffer = new byte[initialLength];
            int read = 0;
    
            int chunk;
            while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)
            {
                read += chunk;
    
                // If we've reached the end of our buffer, check to see if there's
                // any more information
                if (read == buffer.Length)
                {
                    int nextByte = stream.ReadByte();
    
                    // End of stream? If so, we're done
                    if (nextByte == -1)
                    {
                        return buffer;
                    }
    
                    // Nope. Resize the buffer, put in the byte we've just
                    // read, and continue
                    byte[] newBuffer = new byte[buffer.Length * 2];
                    Array.Copy(buffer, newBuffer, buffer.Length);
                    newBuffer[read] = (byte)nextByte;
                    buffer = newBuffer;
                    read++;
                }
            }
            // Buffer is now too big. Shrink it.
            byte[] ret = new byte[read];
            Array.Copy(buffer, ret, read);
            return ret;
        }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.