C#实现上传下载图片

下面就为您介绍C#实现上传下载图片的完整攻略。

1. 上传图片

1.1 上传图片的基本原理

上传图片其实是将本地计算机的图片文件传输到服务器上。由于HTTP协议是无状态的,因此可以使用POST请求将文件传输到服务器上。

1.2 上传图片的技术实现

在C#中进行上传图片的技术实现,可以通过以下步骤完成:

1.2.1 选择需要上传的图片文件

使用OpenFileDialog控件选择需要上传的图片文件,并获取图片文件的本地路径。

OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "图片文件|*.jpg;*.gif;*.png";
if (dialog.ShowDialog() == DialogResult.OK)
{
    string imagePath = dialog.FileName;
}

1.2.2 将图片文件以二进制流的形式进行上传

使用HttpWebRequest对象,构造POST请求,并设置请求头信息,将本地图片文件以二进制流的形式上传到服务器上。

string url = "http://localhost:8080/upload";
string imagePath = "D:\\test.jpg";
string boundary = "----" + DateTime.Now.Ticks.ToString("x");

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data; boundary=" + boundary;

// 设置请求头信息
StringBuilder headerBuilder = new StringBuilder();
headerBuilder.AppendLine("--" + boundary);
headerBuilder.AppendLine("Content-Disposition: form-data; name=\"imageFile\"; filename=\"" + Path.GetFileName(imagePath) + "\"");
headerBuilder.AppendLine("Content-Type: application/octet-stream");
headerBuilder.AppendLine();

byte[] headerBytes = Encoding.UTF8.GetBytes(headerBuilder.ToString());
byte[] footerBytes = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n");

// 构造二进制流
using (Stream requestStream = request.GetRequestStream())
{
    requestStream.Write(headerBytes, 0, headerBytes.Length);

    using (FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
    {
        byte[] buffer = new byte[1024 * 1024];
        int readLength = 0;
        while ((readLength = fileStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            requestStream.Write(buffer, 0, readLength);
        }
    }

    requestStream.Write(footerBytes, 0, footerBytes.Length);
}

// 获取服务器返回信息
using (WebResponse response = request.GetResponse())
{
    using (Stream responseStream = response.GetResponseStream())
    {
        using (StreamReader responseReader = new StreamReader(responseStream, Encoding.UTF8))
        {
            string responseText = responseReader.ReadToEnd();
        }
    }
}

1.3 上传图片的实例

下面是一个上传图片的示例:

private void UploadButton_Click(object sender, EventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.Filter = "图片文件|*.jpg;*.gif;*.png";
    if (dialog.ShowDialog() == DialogResult.OK)
    {
        string url = "http://localhost:8080/upload";
        string imagePath = dialog.FileName;
        string boundary = "----" + DateTime.Now.Ticks.ToString("x");

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "POST";
        request.ContentType = "multipart/form-data; boundary=" + boundary;

        StringBuilder headerBuilder = new StringBuilder();
        headerBuilder.AppendLine("--" + boundary);
        headerBuilder.AppendLine("Content-Disposition: form-data; name=\"imageFile\"; filename=\"" + Path.GetFileName(imagePath) + "\"");
        headerBuilder.AppendLine("Content-Type: application/octet-stream");
        headerBuilder.AppendLine();

        byte[] headerBytes = Encoding.UTF8.GetBytes(headerBuilder.ToString());
        byte[] footerBytes = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n");

        using (Stream requestStream = request.GetRequestStream())
        {
            requestStream.Write(headerBytes, 0, headerBytes.Length);

            using (FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
            {
                byte[] buffer = new byte[1024 * 1024];
                int readLength = 0;
                while ((readLength = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    requestStream.Write(buffer, 0, readLength);
                }
            }

            requestStream.Write(footerBytes, 0, footerBytes.Length);
        }

        using (WebResponse response = request.GetResponse())
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader responseReader = new StreamReader(responseStream, Encoding.UTF8))
                {
                    string responseText = responseReader.ReadToEnd();
                }
            }
        }
    }
}

2. 下载图片

2.1 下载图片的基本原理

下载图片其实是将服务器上的图片文件下载到本地计算机。由于HTTP协议是无状态的,因此可以使用GET请求将服务器上的文件传输到本地计算机上。

2.2 下载图片的技术实现

在C#中进行下载图片的技术实现,可以通过以下步骤完成:

2.2.1 获取服务器图片文件的基本信息

使用HttpWebRequest对象,构造GET请求,并获取服务器图片文件的基本信息,例如文件名、文件类型等。

string imageUrl = "http://localhost:8080/images/test.jpg";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imageUrl);
request.Method = "HEAD";
using (WebResponse response = request.GetResponse())
{
    string fileName = response.Headers["Content-Disposition"].Substring(response.Headers["Content-Disposition"].IndexOf("=") + 1);
    string fileType = response.ContentType;
    long fileSize = response.ContentLength;
}

2.2.2 将图片文件以二进制流的形式进行下载

使用HttpWebRequest对象,构造GET请求,并以二进制流的形式下载服务器上的图片文件。

string imageUrl = "http://localhost:8080/images/test.jpg";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imageUrl);
request.Method = "GET";
using (WebResponse response = request.GetResponse())
{
    using (Stream responseStream = response.GetResponseStream())
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            byte[] buffer = new byte[1024 * 1024];
            int readLength = 0;
            while ((readLength = responseStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                memoryStream.Write(buffer, 0, readLength);
            }

            byte[] imageBytes = memoryStream.ToArray();
        }
    }
}

2.3 下载图片的实例

下面是一个下载图片的示例:

private void DownloadButton_Click(object sender, EventArgs e)
{
    string imageUrl = "http://localhost:8080/images/test.jpg";

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imageUrl);
    request.Method = "HEAD";
    using (WebResponse response = request.GetResponse())
    {
        string fileName = response.Headers["Content-Disposition"].Substring(response.Headers["Content-Disposition"].IndexOf("=") + 1);
        string fileType = response.ContentType;
        long fileSize = response.ContentLength;

        request = (HttpWebRequest)WebRequest.Create(imageUrl);
        request.Method = "GET";
        using (WebResponse imageResponse = request.GetResponse())
        {
            using (Stream responseStream = imageResponse.GetResponseStream())
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    byte[] buffer = new byte[1024 * 1024];
                    int readLength = 0;
                    while ((readLength = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        memoryStream.Write(buffer, 0, readLength);
                    }

                    byte[] imageBytes = memoryStream.ToArray();

                    using (SaveFileDialog dialog = new SaveFileDialog())
                    {
                        dialog.FileName = fileName;
                        dialog.Filter = fileType + "|*" + Path.GetExtension(fileName);

                        if (dialog.ShowDialog() == DialogResult.OK)
                        {
                            using (FileStream fileStream = new FileStream(dialog.FileName, FileMode.Create))
                            {
                                fileStream.Write(imageBytes, 0, imageBytes.Length);
                            }
                        }
                    }
                }
            }
        }
    }
}

以上就是C#实现上传下载图片的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现上传下载图片 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#使用FileStream对象读写文件

    C#使用FileStream对象读写文件 什么是FileStream对象? FileStream对象是用于在Windows操作系统上读写文件的类。通过该对象,我们可以方便地读取文件或将数据写入文件。 读取文件 使用FileStream构造函数打开文件 使用FileStream读取文件,需要在代码中使用FileStream类,可以使用FileStream构造函…

    C# 2023年6月1日
    00
  • C#获取图片文件扩展名的方法

    C#获取图片文件扩展名的方法 当我们需要处理图片文件时,有时需要获取到图片文件的扩展名。本篇文章将介绍如何在C#中获取图片文件扩展名的方法。 方法一:使用Path类 使用Path类提供的静态方法GetExtension(string path)可以返回指定路径字符串的扩展名,如下所示: using System.IO; string filePath = &…

    C# 2023年6月1日
    00
  • C#判断文件路径是否存在或者判断文件是否存在的方法

    C#中判断文件路径是否存在或者判断文件是否存在的方法,可以通过以下两种方式实现: 判断文件路径是否存在 if(Directory.Exists("D:\\exampleFolder")){ Console.WriteLine("文件夹存在"); }else{ Console.WriteLine("文件夹不存在…

    C# 2023年6月1日
    00
  • ASP.NET中的跳转 200, 301, 302转向实现代码

    ASP.NET中的跳转可以实现页面的重定向,通常情况下分为三类:200、301、302。 200:表示页面返回成功,这意味着页面在原url地址下保持不变,不会发生跳转。 301:表示永久重定向,也就是说,原url地址会永久改变到新的url地址,搜索引擎也会将原url流量自动传递给新的url地址。 302:表示临时重定向,也就是说原url地址会暂时改变到新的u…

    C# 2023年5月31日
    00
  • C# Stream.Seek – 在流中定位

    Stream.Seek 方法用于在流中寻找具有给定偏移量的位置,并将流的读/写指针移动到该位置。Seek 方法可用于在文件中进行定位,以便读取或写入指定位置的数据。 使用方法 方法签名 public virtual long Seek(long offset, SeekOrigin origin); 参数含义 offset:偏移量。它表示要在流内移动的字节数…

    C# 2023年4月19日
    00
  • c#消息提示框messagebox的详解及使用

    C#消息提示框MessageBox的详解及使用 在C#编程中,提示信息是非常重要的,而MessageBox是处理提示信息的一种非常常见的方式。在本篇文章中,我们将深入探讨C#中的MessageBox,并介绍如何使用它来优化你的应用程序。 MessageBox对象 MessageBox是System.Windows.Forms命名空间的一部分,是一个弹出窗口,…

    C# 2023年6月7日
    00
  • c++用指针交换数组的实例讲解

    下面我将为您详细讲解“c++用指针交换数组的实例讲解”的完整攻略。 1. 什么是指针? 指针是C/C++的重要概念,它是一个存储内存地址的变量。通过指针,我们可以访问和修改内存中的数据,包括整数、浮点数、数组、结构体等。 2. 如何定义指针? 在C/C++中,我们可以使用 * 运算符来定义指针。下面是一个示例: int *p; // 定义一个指向整数的指针 …

    C# 2023年6月8日
    00
  • C#中LINQ to DataSet操作及DataTable与LINQ相互转换

    下面是详细讲解“C#中LINQ to DataSet操作及DataTable与LINQ相互转换”的完整攻略。 什么是LINQ to DataSet LINQ to DataSet是一组可嵌入到.NET语言中的代码库,使得我们可以在C#或VB.NET中使用LINQ查询DataSet或DataTable的数据。 如何进行LINQ to DataSet操作 我们可…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部