Click here to Skip to main content
Click here to Skip to main content

Simple Upload File to Rapidshare Account Method using C#

By , 2 Apr 2009
 

Introduction

By using this class, you can easily upload your files to Rapidshare.com.

With RapidShare, you can send big files easily and in a secure manner.

This class supports the following type of Rapidshare accounts:

  • Premium accounts (type = 1)
  • Collector's accounts (type = 2)
  • Free users (type = 0)

After Selecting the file and uploading, you should see two links in the result Panel, one for downloading and one for deleting the file from Rapidshare.com.

Using the Code

You can see the full usage of this class in the source of the demo application.

For this application, I'm using Rapidshare version 1 API (the original API is made by Perl).

class QRapidshare
    {
        public string QUploadToRapidshare(string FilePath, string username,
            string password, int AccountType)
        {
            FileSystemInfo _file = new FileInfo(FilePath);
            DateTime dateTime2 = DateTime.Now;
            long l2 = dateTime2.Ticks;
            string s1 = "----------" + l2.ToString("x");
            System.Net.HttpWebRequest httpWebRequest = GetWebrequest(s1);
            using (System.IO.FileStream fileStream = new FileStream(_file.FullName,
                FileMode.Open, FileAccess.Read, FileShare.Read))
            {//Set Headers for Uploading
                byte[] bArr1 = Encoding.ASCII.GetBytes("\r\n--" + s1 + "\r\n");
                string s2 = GetRequestMessage(s1, _file.Name, username, password,
                    AccountType);
                byte[] bArr2 = Encoding.UTF8.GetBytes(s2);
                Stream memStream = new MemoryStream();
                memStream.Write(bArr1, 0, bArr1.Length);
                memStream.Write(bArr2, 0, bArr2.Length);
                byte[] buffer = new byte[1024];
                int bytesRead = 0;//Read File into memStream.
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    memStream.Write(buffer, 0, bytesRead);

                }
                httpWebRequest.ContentLength = memStream.Length;
                fileStream.Close();

                Stream requestStream = httpWebRequest.GetRequestStream();
//Send File from memStream to Rapidshare.com
                memStream.Position = 0;
                byte[] tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer, 0, tempBuffer.Length);
                memStream.Close();
                requestStream.Write(tempBuffer, 0, tempBuffer.Length);
                requestStream.Close();
            }
            string tm = "";
            using (Stream stream = httpWebRequest.GetResponse().GetResponseStream())
            using (StreamReader streamReader = new StreamReader(stream))
            {
                tm = streamReader.ReadToEnd();

            }//Get Response from Rapidshare and Return the Links.
            return tm;
        }

        private string GetRequestMessage(string boundary, string FName,
            string username, string password, int AccountType)
        {
//Generate Headers exactly Like Rapidshare API v.1.0
            System.Text.StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("--");
            stringBuilder.Append(boundary);
            stringBuilder.Append("\r\n");
            stringBuilder.Append("Content-Disposition: form-data; name=\"toolmode2\"");
            stringBuilder.Append("\r\n");
            stringBuilder.Append("\r\n");
            stringBuilder.Append("1");
            stringBuilder.Append("\r\n");
            stringBuilder.Append(boundary);
            stringBuilder.Append("\r\n");
            if (AccountType != 0)//Free User
            {
                if (AccountType == 1) //Premium Account
                {
                    stringBuilder.Append(
                        "Content-Disposition: form-data; name=\"login\"");
                }
                else //Collector Account
                {
                    stringBuilder.Append(
                        "Content-Disposition: form-data; name=\"freeaccountid\"");
                }
                stringBuilder.Append("\r\n");
                stringBuilder.Append("\r\n");
                stringBuilder.Append(username);
                stringBuilder.Append("\r\n");
                stringBuilder.Append(boundary);
                stringBuilder.Append("\r\n");
                stringBuilder.Append
		("Content-Disposition: form-data; name=\"password\"");
                stringBuilder.Append("\r\n");
                stringBuilder.Append("\r\n");
                stringBuilder.Append(password);
                stringBuilder.Append("\r\n");
            }//else if Free User
//File Name
            stringBuilder.Append(boundary);
            stringBuilder.Append("\r\n");
            stringBuilder.Append("Content-Disposition: form-data; name=\"");
            stringBuilder.Append("filecontent");
            stringBuilder.Append("\"; filename=\"");
            stringBuilder.Append(FName);
            stringBuilder.Append("\"");
            stringBuilder.Append("\r\n");
//File Type
            stringBuilder.Append("Content-Type: ");
            stringBuilder.Append("multipart/form-data");
            stringBuilder.Append("\r\n");
            stringBuilder.Append("Content-Transfer-Encoding: ");
            stringBuilder.Append("binary");
            stringBuilder.Append("\r\n");
            stringBuilder.Append("\r\n");
            return stringBuilder.ToString();
        }

        private CookieContainer _cockies = new CookieContainer();
        private HttpWebRequest GetWebrequest(string boundary)
        {//Prepare for Uploading 
            WebClient wc = new WebClient();
            Uri url0 = new Uri( 
                "http://rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1");
            int uploadserver = int.Parse(wc.DownloadString(url0).Trim());
            //Find Free Upload Slot on Rapidshare servers.
            System.Uri uri = new Uri("http://rs" + uploadserver + "l3" +
                ".rapidshare.com/cgi-bin/upload.cgi");
            System.Net.HttpWebRequest httpWebRequest = (
                System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
            httpWebRequest.CookieContainer = _cockies;//Set Cookies for rapidshare
            httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary;
            //Set Fake userAgent exactly like Rapidshare Manager
            httpWebRequest.UserAgent = "RapidUploader[v1,2]";
            //Set Fake Referer
            httpWebRequest.Referer = "http://rapidshare.com/";
            httpWebRequest.Method = "POST";
            httpWebRequest.KeepAlive = true;
            httpWebRequest.Timeout = -1;
            httpWebRequest.Headers.Add
		("Accept-Charset", "iSO-8859-1,utf-8;q=0.7,*;q=0.7");
            httpWebRequest.Headers.Add("Accept-Encoding", "identity");
            httpWebRequest.Headers.Add("Accept-Language", "de-de;q=0.5,en;q=0.3");
            return httpWebRequest;
        }
    }
//You can use this class in .NET Web, Window, WebService,...

In the next version, I want to add an Upload Speed Control and Progress Bar.

You can upload up to 2000 MB file to your Premium account, and up to 200 MB for Collectors account and Free users.

Points of Interest

You can also use this method for your web applications and dynamically upload your files to your Rapidshare.com account.

History

  • 2nd April, 2009: Version 1.0

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)

About the Author

Ghasem Heyrani Nobari
Software Developer (Senior)
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
Member
Ghasem - Heyrani-Nobari
Qasem*AT*SQNco.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionUpdated the codememberMember 80246504 Oct '12 - 7:24 
AnswerRe: Updated the codememberRKillaars25 Mar '13 - 6:00 
QuestionDoesn't work for mememberMr.Extremer30 Mar '11 - 23:39 
AnswerRe: Doesn't work for mememberGhasem Heyrani Nobari30 Mar '11 - 23:53 
GeneralRe: Doesn't work for mememberMr.Extremer31 Mar '11 - 0:11 
GeneralRe: Doesn't work for mememberShoaibRiaz13 Apr '11 - 19:02 
GeneralThx for your nice code , but premium doesn't work anymorememberSiedlerchr15 Aug '10 - 8:37 
GeneralRe: Thx for your nice code , but premium doesn't work anymoremembervsisman30 Aug '10 - 4:48 
GeneralUpload more than 200mbmemberJose Carlos Ribeiro3 Feb '10 - 0:06 
Generalanother questionmemberejtixo16 Dec '09 - 11:58 
how is created stringbuilder? can i created it without contacting hosts?where i can read data to creating stringbuilder? i cant understand context Frown | :( thx so much
Generalmy questionmemberejtixo14 Dec '09 - 4:56 
GeneralRe: my questionmemberdavidgiga15 Dec '09 - 3:13 
GeneralRe: my question [modified]memberejtixo15 Dec '09 - 18:17 
GeneralMy vote of 2memberdavidgiga11 Dec '09 - 1:04 
NewsNew RS-Uploader Class [modified]memberdavidgiga11 Dec '09 - 1:01 
Generalawsome codingmemberAndy329 Oct '09 - 2:41 
GeneralRe: awsome codingmemberMichalss12 Oct '09 - 8:47 
GeneralMy requestmemberSoftsiva31 Aug '09 - 22:10 
GeneralRe: My requestmemberkojoo8931 Aug '09 - 22:13 
General.zip Files don't work after UploadmemberBjoern M.20 Jul '09 - 12:02 
GeneralRe: .zip Files don't work after UploadmemberVitali Kaspler25 Jul '09 - 1:40 
GeneralRe: .zip Files don't work after UploadmemberBjoern M.25 Jul '09 - 3:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 2 Apr 2009
Article Copyright 2009 by Ghasem Heyrani Nobari
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid