c#一次上传多个文件的写法

客户端:

        private void button1_Click(object sender, EventArgs e)
        {
            string[] files = new string[3];
            files[0] = @"C:\temp\001.jpg";
            files[1] = @"C:\temp\002.jpg"; 
            files[2] = @"C:\temp\test.jpg";
            tState.Text = "上传开始...";
            string result =UpLoadFile("100", files, "image/jpeg");
            tState.Text = result;
        }

        public static string UpLoadFile(string ApplyId, string[] files, string contentType)
        {
            string result = string.Empty;
            if (files.Length <= 0) return result;

            NameValueCollection nvc = new NameValueCollection();
            nvc.Add("applyid", ApplyId);
            string url = "http://(serverip)/test/test.aspx";

            string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

            HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
            wr.ContentType = "multipart/form-data; boundary=" + boundary;
            wr.Method = "POST";
            wr.KeepAlive = true;
            wr.Credentials = System.Net.CredentialCache.DefaultCredentials;


            Stream rs = wr.GetRequestStream();

            string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
            foreach (string key in nvc.Keys)
            {
                rs.Write(boundarybytes, 0, boundarybytes.Length);
                string formitem = string.Format(formdataTemplate, key, nvc[key]);
                byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
                rs.Write(formitembytes, 0, formitembytes.Length);
            }
            rs.Write(boundarybytes, 0, boundarybytes.Length);

            byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");

            for (int k = 0, k2 = files.Length; k < k2; k++)
            {
                string fname = "uploadfile" + k.ToString();
                string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
                string header = string.Format(headerTemplate, fname, files[k], contentType);
                byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
                rs.Write(headerbytes, 0, headerbytes.Length);

                FileStream fileStream = new FileStream(files[k], FileMode.Open, FileAccess.Read);
                byte[] buffer = new byte[4096];
                int bytesRead = 0;
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    rs.Write(buffer, 0, bytesRead);
                }
                fileStream.Close();
                if (k < k2 - 1) rs.Write(boundarybytes, 0, boundarybytes.Length);
            }
            rs.Write(trailer, 0, trailer.Length);
            rs.Close();
            WebResponse wresp = null;
            try
            {
                wresp = wr.GetResponse();
                Stream stream2 = wresp.GetResponseStream();
                StreamReader reader2 = new StreamReader(stream2);

                result = reader2.ReadToEnd();
            }
            catch (Exception ex)
            {
                if (wresp != null)
                {
                    wresp.Close();
                    wresp = null;
                }
                result = ex.Message;
            }
            finally
            {
                wr = null;
            }
            return result;
        }

服务端:

protected void Page_Load(object sender, EventArgs e)
  {

        string fpath = getApplyidPath(applyid);
        int n = Request.Files.AllKeys.Length;
        int flag = 0, count = 0;
        int k=0;
        byte[] bts;
        for (int i = 0; i < n; i++)
        {
            System.Web.HttpPostedFile file = Request.Files[i];
            filename = file.FileName;
            if (filename.Length > 0)
            {
                extname = filename.Substring(filename.LastIndexOf("."));
                fname = fpath + (i + 1).ToString() + extname;
                k =(int)file.InputStream.Length;
                bts = new byte[k];
                file.InputStream.Read(bts, 0, k);

                file.SaveAs(fname);
                flag = (flag | (int)Math.Pow(2 , i));
                count++;
            }
        }
            Response.Write("保存“+ count.ToString()+“个文件。”);
    }

    private string getApplyidPath(int applyid)
    {
        //get and set path
        string phpath = Server.MapPath("/upload/") + applyid.ToString()+"\\";
        if (!Directory.Exists(phpath)) Directory.CreateDirectory(phpath);
        return phpath;
    }

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用 C# 中的 OpenFileDialog 控件来实现批量上传多个文件,这需要你在客户端手动选择多个文件进行上传。 以下是一个简单的示例代码: ``` using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; namespace FileUploader { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btnUpload_Click(object sender, EventArgs e) { // 创建 OpenFileDialog 对象 OpenFileDialog openFileDialog = new OpenFileDialog(); // 设置文件选择框的属性 openFileDialog.Multiselect = true; openFileDialog.Filter = "All files (*.*)|*.*"; // 显示文件选择框 DialogResult result = openFileDialog.ShowDialog(); // 如果用户选择了文件,则上传文件 if (result == DialogResult.OK) { // 获取用户选择的文件列表 List<string> fileNames = openFileDialog.FileNames.ToList(); // 遍历文件列表,上传每个文件 foreach (string fileName in fileNames) { // 上传文件 UploadFile(fileName); } } } private void UploadFile(string fileName) { // TODO: 在这里编写上传文件的代码 // 示例代码:将文件名输出到控制台 Console.WriteLine(fileName); } } } ``` 在上面的示例代码中,当用户点击 "上传" 按钮时,会显示一个文件选择框,允许用户选择多个文件进行上传。选择完成后,程序将获取用户选择的文件列表,并遍历列表,对每个文件调用 UploadFile 方法进行上传。在 UploadFile 方法中,你可以编写自己的上传代码。这里的示例代码只是将文件名输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_*大米*_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值