IT WORKS!!!!!

This commit is contained in:
Bitl 2019-11-08 18:54:55 -07:00
parent 4b1244635e
commit 21fb862ae3
4 changed files with 90 additions and 53 deletions

View File

@ -1,32 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Windows.Forms;
using System.IO;
using System.ComponentModel;
class Downloader
{
private string fileURL;
private string fileName;
private string fullFileName;
private string fileEXT;
private string fileFilter;
private string downloadOutcome;
private string downloadOutcomeAddText;
private ProgressBar downloadProgress;
private SaveFileDialog saveFileDialog1;
public Downloader(string url, string name, string ext, string filter, ProgressBar progress)
public Downloader(string url, string name, string filter, ProgressBar progress)
{
fileName = name;
fileEXT = ext;
fileURL = url;
fileFilter = filter;
fullFileName = fileName + fileEXT;
downloadProgress = progress;
}
@ -46,25 +37,18 @@ class Downloader
saveFileDialog1 = new SaveFileDialog()
{
FileName = fullFileName,
FileName = fileName,
//"Compressed zip files (*.zip)|*.zip|All files (*.*)|*.*"
Filter = fileFilter,
Title = "Save " + fullFileName
Title = "Save " + fileName
};
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
MessageBox.Show(saveFileDialog1.FileName);
using (WebClient wc = new WebClient())
{
wc.DownloadProgressChanged += wc_DownloadProgressChanged;
wc.DownloadFileAsync(new Uri(fileURL), saveFileDialog1.FileName);
}
downloadOutcome = "File " + fullFileName + " downloaded!" + downloadOutcomeAddText;
int read = DownloadGZipFile(fileURL, saveFileDialog1.FileName);
downloadOutcome = "File " + Path.GetFileName(saveFileDialog1.FileName) + " downloaded! " + read + " bytes written!" + downloadOutcomeAddText;
}
catch (Exception ex)
{
@ -73,6 +57,81 @@ class Downloader
}
}
public static int DownloadGZipFile(string remoteFilename, string localFilename)
{
//credit to Tom Archer (https://www.codeguru.com/columns/dotnettips/article.php/c7005/Downloading-Files-with-the-WebRequest-and-WebResponse-Classes.htm)
//and Brokenglass (https://stackoverflow.com/questions/4567313/uncompressing-gzip-response-from-webclient/4567408#4567408)
// Function will return the number of bytes processed
// to the caller. Initialize to 0 here.
int bytesProcessed = 0;
// Assign values to these objects here so that they can
// be referenced in the finally block
Stream remoteStream = null;
Stream localStream = null;
WebResponse response = null;
// Use a try/catch/finally block as both the WebRequest and Stream
// classes throw exceptions upon error
try
{
// Create a request for the specified remote file name
var request = (HttpWebRequest)WebRequest.Create(remoteFilename);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
if (request != null)
{
// Send the request to the server and retrieve the
// WebResponse object
response = request.GetResponse();
if (response != null)
{
// Once the WebResponse object has been retrieved,
// get the stream object associated with the response's data
remoteStream = response.GetResponseStream();
// Create the local file
localStream = File.Create(localFilename);
// Allocate a 1k buffer
byte[] buffer = new byte[1024];
int bytesRead;
// Simple do/while loop to read from stream until
// no bytes are returned
do
{
// Read data (up to 1k) from the stream
bytesRead = remoteStream.Read(buffer, 0, buffer.Length);
// Write the data to the local file
localStream.Write(buffer, 0, bytesRead);
// Increment total bytes processed
bytesProcessed += bytesRead;
} while (bytesRead > 0);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
// Close the response and streams objects here
// to make sure they're closed even if an exception
// is thrown at some point
if (response != null) response.Close();
if (remoteStream != null) remoteStream.Close();
if (localStream != null) localStream.Close();
}
// Return total bytes processed to caller.
return bytesProcessed;
}
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
downloadProgress.Value = e.ProgressPercentage;

View File

@ -34,15 +34,13 @@
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(36, 101);
this.button1.Location = new System.Drawing.Point(12, 80);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(365, 23);
this.button1.Size = new System.Drawing.Size(206, 23);
this.button1.TabIndex = 0;
this.button1.Text = "download";
this.button1.UseVisualStyleBackColor = true;
@ -50,15 +48,15 @@
//
// progressBar1
//
this.progressBar1.Location = new System.Drawing.Point(36, 72);
this.progressBar1.Location = new System.Drawing.Point(12, 51);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(365, 23);
this.progressBar1.Size = new System.Drawing.Size(206, 23);
this.progressBar1.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(59, 13);
this.label1.Location = new System.Drawing.Point(33, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(46, 13);
this.label1.TabIndex = 2;
@ -66,14 +64,14 @@
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(36, 36);
this.textBox1.Location = new System.Drawing.Point(12, 25);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 3;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(162, 36);
this.textBox2.Location = new System.Drawing.Point(118, 25);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(100, 20);
this.textBox2.TabIndex = 4;
@ -81,35 +79,17 @@
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(201, 13);
this.label2.Location = new System.Drawing.Point(159, 9);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(18, 13);
this.label2.TabIndex = 5;
this.label2.Text = "url";
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(301, 36);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(100, 20);
this.textBox3.TabIndex = 6;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(328, 13);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(40, 13);
this.label3.TabIndex = 7;
this.label3.Text = "file ext.";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(439, 139);
this.Controls.Add(this.label3);
this.Controls.Add(this.textBox3);
this.ClientSize = new System.Drawing.Size(233, 113);
this.Controls.Add(this.label2);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
@ -133,8 +113,6 @@
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label3;
}
}

View File

@ -19,7 +19,7 @@ namespace NovetusTest_FileDownloader
private void button1_Click(object sender, EventArgs e)
{
Downloader download = new Downloader(textBox2.Text, textBox1.Text, textBox3.Text, "All files (*.*)|*.*", progressBar1);
Downloader download = new Downloader(textBox2.Text, textBox1.Text, "Roblox Model (*.rbxm)|*.rbxm|Roblox Mesh (*.mesh)|*.mesh|PNG Image (*.png)|*.png|WAV Sound (*.wav)|*.wav", progressBar1);
try
{