473,320 Members | 1,930 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

how to upload file via c# code

Hi, i want to create a web page that allow to be upload.
And my question is: without using the web browser I want to use something in System.Net such as HttpWebRequest or WebClient or some kind to programmatically upload a file along with sending the checkbox to that upload page.
And i have just read this link:
http://bytes.com/topic/c-sharp/answe...de#post1076309

and i don't know the server code clearly. Yes, please, tell me the server code.
sorry for bad english.
Aug 10 '12 #1

✓ answered by Frinavale

Now that you have your ASP.NET page working as per post #17...

I tried your code and it never even hit the ASP.NET code because you don't call the HttpWebRequest's GetResponse method.

Also, you need to specify what your boundary is, and write the boundary delimiter around your content.

And you need to specify the "Key" for the file so that the ASP.NET code can retrieve the file....and you need to specify the file name that you want the file to have on the server...

I wrote a quick WPF application that has a single button that allows the user to browse to a .jpg image to select for uploading. It then uploads the picture using the HttpWebRequest class.

Please note that if your image is too big, it will crash in the ASP.NET server code.

Again, I have no validation code or checks or anything....

Expand|Select|Wrap|Line Numbers
  1.  private void uploadImage_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             // Configure open file dialog box
  4.             Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
  5.             dlg.FileName = "Image"; // Default file name
  6.             dlg.DefaultExt = ".jpg"; // Default file extension
  7.             dlg.Filter = "Images (.jpg)|*.jpg"; // Filter files by extension
  8.  
  9.             // Show open file dialog box
  10.             Nullable<bool> result = dlg.ShowDialog();
  11.  
  12.             // Process open file dialog box results
  13.             if (result == true)
  14.             {
  15.                 string filePath = dlg.FileName; // Get the image path
  16.                 string url = "http://localhost:50802/SaveImage.aspx";
  17.                 string boundary = string.Format("----------------------------{0}", DateTime.Now.Ticks.ToString("x"));//The boundary for the file(s) to upload
  18.  
  19.                 HttpWebRequest uploadImageHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);//used to upload the image to theh server
  20.                 uploadImageHttpWebRequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);//indicating the boundary and content type
  21.                 uploadImageHttpWebRequest.Method = "POST";//indicating that we are using POST to send the data to the server
  22.                 uploadImageHttpWebRequest.KeepAlive = true;
  23.  
  24.                 Stream memStream = new System.IO.MemoryStream();//used to collect the necessary information to send to the server...starting with the beginning boundary 
  25.                 byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  26.                 memStream.Write(boundarybytes, 0, boundarybytes.Length);
  27.  
  28.  
  29.                 string[] fileNameTokens = filePath.Split('\\');//retrieving the file's name
  30.                 string fileName = string.Format("{0}{1}",DateTime.Now.Ticks.ToString("x"),fileNameTokens[fileNameTokens.Length - 1]);//genearting a unique file name to save on the server
  31.  
  32.                 //indicating the Key for the file that we are uploading ('name') and the name of the file as we want it to appear on the server ('filename')
  33.                 string header = string.Format("Content-Disposition: form-data; name=\"imageToUpload\"; filename=\"{0}\"\r\n Content-Type: application/octet-stream\r\n\r\n", fileName);
  34.                 byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  35.                 memStream.Write(headerbytes, 0, headerbytes.Length);
  36.  
  37.                 //Reading the file and writing it to the memStream
  38.                 using (FileStream fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read))
  39.                 {
  40.                     byte[] buffer = new byte[1024];
  41.                     int bytesRead = 0;
  42.                     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  43.                     {
  44.                         memStream.Write(buffer, 0, bytesRead);
  45.                     }
  46.  
  47.                 }
  48.  
  49.                 //writing the closing boundary 
  50.                 memStream.Write(boundarybytes, 0, boundarybytes.Length);
  51.                 uploadImageHttpWebRequest.ContentLength = memStream.Length; //indicating the length of the content
  52.                 Stream requestStream = uploadImageHttpWebRequest.GetRequestStream();//retrieving the stream that will be used to upload the file to the server
  53.  
  54.                 //writing the memory stream into a byte array and writing that byte array to the stream used to upload the file to the server
  55.                 memStream.Position = 0;
  56.                 byte[] tempBuffer = new byte[memStream.Length];
  57.                 memStream.Read(tempBuffer, 0, tempBuffer.Length);
  58.                 memStream.Close();//cleaning up our memory stream since we aren't using it any more
  59.  
  60.                 requestStream.Write(tempBuffer, 0, tempBuffer.Length);
  61.                 requestStream.Close();
  62.  
  63.                 WebResponse uploadResponse = uploadImageHttpWebRequest.GetResponse();//this sends the request to the server and uploads the file
  64.                 uploadResponse.Close();//clean up the response
  65.                 uploadImageHttpWebRequest = null;//clean up the request
  66.                 uploadResponse = null;
  67.  
  68.             }
  69.         }
My code only uploads a single image to the server.
I had it working in such a way that it could upload more than one image though...it requires simple changes to the above code and requires changes to the server side code as well but the exercise was fun because before now I had never used the HttpWebRequest class.

-Frinny

21 21530
Frinavale
9,735 Expert Mod 8TB
I don't understand what you are trying to do.

Do you want to upload a file to the server through a webpage?

Or do you want to create a desktop application that uploads a webpage-file to a server?

-Frinny
Aug 10 '12 #2
thanks for your reply!
hmm, i'm trying to create a application that upload Images to a local asp.net web page!
And, i don't know how to code in the asp.net project (the server?)
Please, take a look in the link I gave above for more information!
Aug 10 '12 #3
ariful alam
185 100+
@thevinh92,

What you added above in your first post is a server side webpage created using ASP.net technology. To create a ASP.net webpage you can use VB.net or C#.net language.

Now, you can upload image in your web server using two technique. one is in your web server's file system. and another is in your web server's database system.

Now, question is what you need? to sample you a ASP.net image/file upload code or to describe you the code that you linked in your first post.

hope it's help you. :)
Aug 11 '12 #4
Hi, ariful alam! thanks for your reply!
yes, i need your help in describe the code that i linked in my first (all of the server code and client code, but the server code is the most). And i'll very happy if you show me another asp.net image/file upload code!
Aug 11 '12 #5
ariful alam
185 100+
I can describe another ASP.net image/file upload code.

but you have to tell me, do you have any idea about server side code and ASP.net technology? Do you have Visual Studio.net? i use Visual Studio.net 2010 for creating ASP.net projects.
Aug 11 '12 #6
yes,i have Visual Studio.net 2010!
Aug 11 '12 #7
ariful alam
185 100+
Ok,

Start a ASP.net/web project (New web site) (ASP.net empty web site) in your Visual Studio.net 2010 using Visual C#.

Now a new web form from Website->Add New Item..

This will add a default.aspx page in your project. Now Add/drag a FileUpload control and a Button control from the Toolbox in your default.aspx page.

Expand|Select|Wrap|Line Numbers
  1. <asp:FileUpload ID="FileUpload1" runat="server" />
Expand|Select|Wrap|Line Numbers
  1. <asp:Button ID="Button1" runat="server" Text="Button" />
Now double click the Button. That will open up default.aspx.cs file to write code for uploading an image.

write the following in your button's event handler.

Expand|Select|Wrap|Line Numbers
  1. string savePath = Server.MapPath("images\\");
  2.         if (FileUpload1.PostedFile.ContentLength != 0)
  3.         {
  4.             FileUpload1.SaveAs(savePath + FileUpload1.FileName);
  5.         }
here, string savePath = Server.MapPath("images\\");
defines the location to upload the image file. this folder should be in your project directory.

if(FileUpload1.PostedFile.ContentLength != 0)
{
...
}

checks the image file is selected or not.
if the FileUpload1 has a file, then

FileUpload1.SaveAs(savePath + FileUpload1.FileName);

saves the file in the location.

Nothing else...

Now run the default.aspx file.

NOTE: This is simple one. it can be more complected.

a Microsoft's sample link is given here. File Upload

Hope it's help you. :)
Aug 11 '12 #8
thanks, ariful alam!
But, as i said in the first post, "without using the web browser I want to use something in System.Net such as HttpWebRequest".
yes, I want to create a destop application to upload picture to a local asp.net web page. And i think i will use HttpWebRequest, but i don't know how to handle in the server (the asp.net page)!
Aug 12 '12 #9
ariful alam
185 100+
If you have your local ASP.net web site, then why you need a desktop image/file up-loader? Local ASP.net web site means i think you have your site at your own computer. Isn't it?
Aug 12 '12 #10
Thanks for your reply!
Yes, I know it. But it is my homework, I have to do it.
Aug 12 '12 #11
ariful alam
185 100+
Ok, you can do it by creating FTP accessible application , if your Web Server and image uploader machine not same. you have to create a FTP access desktop software that can upload the image(s) to the Web Server Machine in a specific folder.

Or, if your Web Server and image uploader machine are same, than just create a desktop application that can copy-paste your image(s) from the selected location to your local web site's destination location.

Hope it's help you. :)
Aug 12 '12 #12
thanks for the all you help!
But, my teacher made me use HttpWebRequest and http protocol!
My idea is: i wil use HttpWebRequest to send Images to the server, and in the server (asp.net page) i will show the Images that i upload! But i don't know how to do!
plz, help me!
Aug 12 '12 #13
1.Start Microsoft Visual Studio .NET
2. On the File menu, point to New, and then click Project.
3. In the New Project dialog box, click Visual C# Projects under Project Types, and then click ASP.NET Web Application under Templates.
4.In the Location box, type the URL to create the project. For more read it <link removed per forum policy>
Aug 13 '12 #14
Frinavale
9,735 Expert Mod 8TB
Create a desktop application type (Not an ASP.NET web application).

Check out the HttpWebRequest class documentation for information on how to create a connection to the web server.

Once you have made that connection you can use the GetRequestStream method...which returns a Stream object to use to send data.

I've never used the HttpWebRequest to send data to a server, so I would stick to the MSDN documentation to learn how to do this. It is most likely that you will have to implement an aspx page that manages the uploading of the images...and that the HttpWebRequest class will connect to this page to send the image to it.

So, along with your desktop application, you will be developing the aspx page that manage the upload process and you will have to write an aspx page that displays the images.

-Frinny
Aug 13 '12 #15
Thanks, Frinavale! That's exactly what i'm going to do! But, can you tell me how to do in the aspx page!
Aug 13 '12 #16
Frinavale
9,735 Expert Mod 8TB
The aspx page responsible for managing uploading of files will probably have all of it's code in the Page Load event. It would be similar to what ariful alam suggested in post #8..except that you don't need to use the FileUpload control because you'll be retrieving the file from the Request object and the code would be in the PageLoad event instead of a button click event.


For example,

If you created an asp.net web application and added an new WebForm to it called "SaveImage" you would have the following in the ASP.NET code:

Expand|Select|Wrap|Line Numbers
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.SaveImage" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7.     <title></title>
  8. </head>
  9. <body>
  10.     <form id="form1" runat="server"  enctype="multipart/form-data">
  11.     <div>
  12.  
  13.     <input type="file" id="imageToUpload" name="imageToUpload"  runat="server"/>
  14.     <asp:Button runat="server" ID="btnUploadFile" Text="Upload" />
  15.  
  16.     </div>
  17.     </form>
  18. </body>
  19. </html>

Your C# code would simply be:
Expand|Select|Wrap|Line Numbers
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7.  
  8. namespace WebApplication1
  9. {
  10.     public partial class SaveImage : System.Web.UI.Page
  11.     {
  12.         protected void Page_Load(object sender, EventArgs e)
  13.         {
  14.             HttpPostedFile file = Request.Files["imageToUpload"];
  15.  
  16.             //check file was submitted
  17.             if (file != null && file.ContentLength > 0)
  18.             {
  19.                 string fname = file.FileName;
  20.                 file.SaveAs(Server.MapPath(string.Format("~/Images/{0}", fname)));
  21.             }
  22.  
  23.         }
  24.     }
  25. }

The above code uses an Images folder to store the images into. You should either add an Images folder to your ASP.NET application so you have somewhere to store the images... or use file.SaveAs(Server.MapPath(string.Format("~/{0}", fname))); instead.

If you compile and run this application you will be able to pick a file, hit the button, and it will upload and save it to the folder specified (either the Images folder or the root of the running project).

You don't even really need the button...but it's there so that you can just test the ASP.NET save logic.

There is no validation in my logic either...you SHOULD put validation logic into your code to ensure that you are only uploading files that you are expecting.

Once you have this working, you will have to write the Desktop application that uses the HttpWebRequest class to request the page you just implemented and to write the image back up to the server.

Make sure that your header content-type matches what the server is expecting.

-Frinny
Aug 13 '12 #17
Thanks Frinavale! I test your code, it's very good!
And, here is my code in the client, and i don't know where it wrong:
Expand|Select|Wrap|Line Numbers
  1. string Url = "http://localhost:2595/SaveImage.aspx";
  2.             Uri passUrl = new Uri(Url);
  3.             HttpWebRequest httpWR = (HttpWebRequest)HttpWebRequest.Create(Url);
  4.             httpWR.Method = "POST";
  5.             httpWR.ContentType = "multipart/form-data; boundary=" +  boundary;
  6.             httpWR.KeepAlive = true;
  7.             httpWR.Credentials = System.Net.CredentialCache.DefaultCredentials; 
  8.             byte[] bytes = File.ReadAllBytes(@txtPath.Text);
  9.             httpWR.ContentLength = bytes.Length;
  10.             Stream rs = httpWR.GetRequestStream();
  11.             rs.Write(bytes, 0, bytes.Length);
  12.             rs.Close();
  13.  
Please help me!
Aug 14 '12 #18
Frinavale
9,735 Expert Mod 8TB
thevinh92, I've never used the HttpWebRequest class before to do such a thing.

You have to give me a clue as to What is wrong?
Are you getting an error?
Is it doing something incorrectly?
Give me more details about the problem....

-Frinny
Aug 15 '12 #19
Frinavale
9,735 Expert Mod 8TB
Now that you have your ASP.NET page working as per post #17...

I tried your code and it never even hit the ASP.NET code because you don't call the HttpWebRequest's GetResponse method.

Also, you need to specify what your boundary is, and write the boundary delimiter around your content.

And you need to specify the "Key" for the file so that the ASP.NET code can retrieve the file....and you need to specify the file name that you want the file to have on the server...

I wrote a quick WPF application that has a single button that allows the user to browse to a .jpg image to select for uploading. It then uploads the picture using the HttpWebRequest class.

Please note that if your image is too big, it will crash in the ASP.NET server code.

Again, I have no validation code or checks or anything....

Expand|Select|Wrap|Line Numbers
  1.  private void uploadImage_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             // Configure open file dialog box
  4.             Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
  5.             dlg.FileName = "Image"; // Default file name
  6.             dlg.DefaultExt = ".jpg"; // Default file extension
  7.             dlg.Filter = "Images (.jpg)|*.jpg"; // Filter files by extension
  8.  
  9.             // Show open file dialog box
  10.             Nullable<bool> result = dlg.ShowDialog();
  11.  
  12.             // Process open file dialog box results
  13.             if (result == true)
  14.             {
  15.                 string filePath = dlg.FileName; // Get the image path
  16.                 string url = "http://localhost:50802/SaveImage.aspx";
  17.                 string boundary = string.Format("----------------------------{0}", DateTime.Now.Ticks.ToString("x"));//The boundary for the file(s) to upload
  18.  
  19.                 HttpWebRequest uploadImageHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);//used to upload the image to theh server
  20.                 uploadImageHttpWebRequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);//indicating the boundary and content type
  21.                 uploadImageHttpWebRequest.Method = "POST";//indicating that we are using POST to send the data to the server
  22.                 uploadImageHttpWebRequest.KeepAlive = true;
  23.  
  24.                 Stream memStream = new System.IO.MemoryStream();//used to collect the necessary information to send to the server...starting with the beginning boundary 
  25.                 byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  26.                 memStream.Write(boundarybytes, 0, boundarybytes.Length);
  27.  
  28.  
  29.                 string[] fileNameTokens = filePath.Split('\\');//retrieving the file's name
  30.                 string fileName = string.Format("{0}{1}",DateTime.Now.Ticks.ToString("x"),fileNameTokens[fileNameTokens.Length - 1]);//genearting a unique file name to save on the server
  31.  
  32.                 //indicating the Key for the file that we are uploading ('name') and the name of the file as we want it to appear on the server ('filename')
  33.                 string header = string.Format("Content-Disposition: form-data; name=\"imageToUpload\"; filename=\"{0}\"\r\n Content-Type: application/octet-stream\r\n\r\n", fileName);
  34.                 byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  35.                 memStream.Write(headerbytes, 0, headerbytes.Length);
  36.  
  37.                 //Reading the file and writing it to the memStream
  38.                 using (FileStream fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read))
  39.                 {
  40.                     byte[] buffer = new byte[1024];
  41.                     int bytesRead = 0;
  42.                     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  43.                     {
  44.                         memStream.Write(buffer, 0, bytesRead);
  45.                     }
  46.  
  47.                 }
  48.  
  49.                 //writing the closing boundary 
  50.                 memStream.Write(boundarybytes, 0, boundarybytes.Length);
  51.                 uploadImageHttpWebRequest.ContentLength = memStream.Length; //indicating the length of the content
  52.                 Stream requestStream = uploadImageHttpWebRequest.GetRequestStream();//retrieving the stream that will be used to upload the file to the server
  53.  
  54.                 //writing the memory stream into a byte array and writing that byte array to the stream used to upload the file to the server
  55.                 memStream.Position = 0;
  56.                 byte[] tempBuffer = new byte[memStream.Length];
  57.                 memStream.Read(tempBuffer, 0, tempBuffer.Length);
  58.                 memStream.Close();//cleaning up our memory stream since we aren't using it any more
  59.  
  60.                 requestStream.Write(tempBuffer, 0, tempBuffer.Length);
  61.                 requestStream.Close();
  62.  
  63.                 WebResponse uploadResponse = uploadImageHttpWebRequest.GetResponse();//this sends the request to the server and uploads the file
  64.                 uploadResponse.Close();//clean up the response
  65.                 uploadImageHttpWebRequest = null;//clean up the request
  66.                 uploadResponse = null;
  67.  
  68.             }
  69.         }
My code only uploads a single image to the server.
I had it working in such a way that it could upload more than one image though...it requires simple changes to the above code and requires changes to the server side code as well but the exercise was fun because before now I had never used the HttpWebRequest class.

-Frinny
Aug 15 '12 #20
Oh, Frinavale, Thank you very much! You don't know how i be happy when i test your code and it run successfully!
And, i still need to ask you more question:
How can i download the Image that i upload If i use HttpWebRequest with the method = "GET"?
Thanks again!
Aug 16 '12 #21
Frinavale
9,735 Expert Mod 8TB
@thevinh92, the only time I have ever used the HttpWebRequest is to help you with this question. I don't know how to do what you are asking off right now and it may take me a few days before I am able to sit down and play with it more.

I suggest researching the topic in the mean time to try and get something to work. That way we can work with code that you have written and tried when I am able to check it out.

On top of that, you should start a new thread for your new question :)

On this forum, you should stick to one question per thread to keep things simple.

Your question is wondering away from ASP.NET and falling under the domain of the C# forum.

-Frinny
Aug 17 '12 #22

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: Muppy | last post by:
I've created a page with a form to upload files: <h1>Upload di un file</h1> <form enctype="multipart/form-data" method="post" action="do_upload1.php"> <p><strong>File da trasferire:</strong><br>...
5
by: Dave Smithz | last post by:
Hi There, I have a PHP script that sends an email with attachment and works great when provided the path to the file to send. However this file needs to be on the same server as the script. ...
3
by: Brian | last post by:
Hi, I've been trying to find a way to upload file to another site that is not using IIS. The site that I want to upload file to has a simple php script to receive file uploaded through standard...
1
by: akiko | last post by:
i am student and i must to do project about web app by Ruby on rails i can not do past upload file.i try looking code but i just meet upload file image. i want to code upload file that it must to...
4
by: bienwell | last post by:
Hi all, I developed an web page in ASP.NET to upload file into the server. In the Web.config file, I declared <httpRuntime executionTimeout="1200" maxRequestLength="400000" /> The MAX...
4
by: google.com | last post by:
Hi there! I've been digging around looking for a sample on how to upload a file without user action. I found the following article covering the area: ...
1
by: printline | last post by:
Hello all I have a php script that uploads a file from a form into a directory. The directory is automatically created through the script. But the upload file is not put in to the directory,...
5
by: kailashchandra | last post by:
I am trying to upload a file in php,but it gives me error msg please Help me? My Code is like below:- i have one php file named upload.php and i have another html file named upload.html and...
1
Canabeez
by: Canabeez | last post by:
Hi all, anyone has an idea why IE is not uploading file and FF does? I'm creating a FORM + IFRAME using DOM and trying to upload a file, now Firefox and Chrome do thins perfectly. I have...
2
by: lka527 | last post by:
I am trying to make a site available for someone to *upload* certain type of text file (.txt) that can be parsed by written code. the upload file is available on the main site but I need this to...
0
by: DolphinDB | last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation. Take...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.