`
xiaojiit
  • 浏览: 133612 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

C# 编程WinForm 上传文件到 Asp.Net 的 Web项目

    博客分类:
  • C#
阅读更多

在做WinForm时,需要WinForm同Web进行交互,有时需要进行图片、文件的上传操作.

 

WinForm的代码如下:

 

private void button2_Click(object sender, EventArgs e)
        {
            // string a = MyUploader(this.textBox1.Text.Trim(), @"http://localhost:4451/TEST/Default.aspx");

            string a = MyUploader(this.textBox1.Text.Trim(), @"http://localhost/release/Default.aspx");

          MessageBox.Show(a);
        }


        public static string MyUploader(string strFileToUpload, string strUrl)
        {
            string strFileFormName = "file";
            Uri oUri = new Uri(strUrl);
            string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");

            // The trailing boundary string
            byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");

            // The post message header
            StringBuilder sb = new StringBuilder();
            sb.Append("--");
            sb.Append(strBoundary);
            sb.Append("\r\n");
            sb.Append("Content-Disposition: form-data; name=\"");
            sb.Append(strFileFormName);
            sb.Append("\"; filename=\"");
            sb.Append(Path.GetFileName(strFileToUpload));
            sb.Append("\"");
            sb.Append("\r\n");
            sb.Append("Content-Type: ");
            sb.Append("application/octet-stream");
            sb.Append("\r\n");
            sb.Append("\r\n");
            string strPostHeader = sb.ToString();
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);

            // The WebRequest
            HttpWebRequest oWebrequest = (HttpWebRequest)WebRequest.Create(oUri);
            oWebrequest.ContentType = "multipart/form-data; boundary=" + strBoundary;
            oWebrequest.Method = "POST";

            // This is important, otherwise the whole file will be read to memory anyway...
            oWebrequest.AllowWriteStreamBuffering = false;

            // Get a FileStream and set the final properties of the WebRequest
            FileStream oFileStream = new FileStream(strFileToUpload, FileMode.Open, FileAccess.Read);
            long length = postHeaderBytes.Length + oFileStream.Length + boundaryBytes.Length;
            oWebrequest.ContentLength = length;
            Stream oRequestStream = oWebrequest.GetRequestStream();

            // Write the post header
            oRequestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

            // Stream the file contents in small pieces (4096 bytes, max).
            byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)oFileStream.Length))];
            int bytesRead = 0;
            while ((bytesRead = oFileStream.Read(buffer, 0, buffer.Length)) != 0)
                oRequestStream.Write(buffer, 0, bytesRead);
            oFileStream.Close();

            // Add the trailing boundary
            oRequestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
            WebResponse oWResponse = oWebrequest.GetResponse();
            Stream s = oWResponse.GetResponseStream();
            StreamReader sr = new StreamReader(s);
            String sReturnString = sr.ReadToEnd();
            Console.WriteLine(sReturnString);
            // Clean up
            oFileStream.Close();
            oRequestStream.Close();
            s.Close();
            sr.Close();

            return sReturnString;
        }

 

在按钮点击时,便会触发提交操作,Web的Default.aspx代码如下:

 

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Files.Count > 0)
        {
            try
            {
                HttpPostedFile file = Request.Files[0];
                string filePath = this.MapPath("FileUpload") + "\\" + file.FileName;
                file.SaveAs(filePath);

                Response.Write("成功了");
     
            }
            catch (Exception)
            {

                Response.Write("失败了1");
            }
        }
        else
        {
            Response.Write("失败了2");
        }

        Response.End();
    }
}
 

 

这样,便可以将文件通过winform 上传到web 服务器上。

 

如果服务器端是Java的Web,则可以借助SmartUpload组件,Java端上传的Servlet如下:

 

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.Files;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

public class UpLoad extends HttpServlet {


	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			SmartUpload mySmartUpload = new SmartUpload();
			mySmartUpload.initialize(getServletConfig(), request, response);
			mySmartUpload.upload();
			Files files = mySmartUpload.getFiles();
			int num = files.getCount();
			for (int i = 0; i < num; i++) {
				com.jspsmart.upload.File myfile = files.getFile(i);
				String fileName = myfile.getFileName();
                                fileName = new String(fileName.getBytes(), "UTF-8");//强转成UTF8不然中文文件名会是乱码
                                myfile.saveAs("/upload/" + fileName, i + 1);
			}
			String ret = "OK";
			byte[] rep = ret.getBytes();
			response.getOutputStream().write(rep);
		} catch (SmartUploadException e) {
			e.printStackTrace();
		}
	}
}
 

 

至此,WinForm上传文件到Web项目,服务器端为.Net和Java的,均可以使用。

 

 

 

4
6
分享到:
评论
2 楼 xiaojiit 2014-05-30  
99九夜茴 写道
请问能不能把服务器端是Java的Web传我一下啊?我把代码复制到eclipse有报错。。我邮箱是578617577@qq.com

是不是少包呀,Java Web是很简单的一个。
1 楼 99九夜茴 2013-05-16  
请问能不能把服务器端是Java的Web传我一下啊?我把代码复制到eclipse有报错。。我邮箱是578617577@qq.com

相关推荐

    C#Web服务Asp.net调用winFrom调用

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用程序(WinForms)和Web服务(ASP.NET)方面。本主题将深入探讨如何在ASP.NET Web服务中调用WinForms应用程序的功能,以实现更复杂的系统集成和...

    C#通过winform和http上传文件

    在实际项目中,可能会结合ASP.NET等Web技术,构建更复杂的服务器端逻辑来处理上传的文件。对于大型文件,还可能需要实现断点续传功能,或者使用异步上传以提升性能。总的来说,这个过程涉及到客户端和服务器端的交互...

    c#、ASP.Net、Winform、WebApplication 编程150例源码 ,《C#编程150例》的附带源码文件

    《C#编程150例》是一本深入实践的编程指南,涵盖了C#语言、ASP.NET、Winform、WebApplication以及WebService等多个方面的内容。通过学习这些源码实例,读者可以全面掌握C#及其相关框架的实用技能。以下是针对每个...

    c# WebApi Winform托管

    本示例中的"WebApi Winform托管"是一个结合了C#的Windows Forms(Winform)和ASP.NET Web API的技术实现,它允许在Winform应用内部托管和调用Web API服务。下面我们将深入探讨这个主题。 **WebAPI**是微软为构建...

    C#winform调用webapi.rar

    在"C# WinForm调用WebAPI"的场景中,我们主要涉及到以下几个关键知识点: 1. **C# WinForm编程**:WinForm是.NET Framework的一部分,提供了一个用于创建交互式图形用户界面的平台。在C# WinForm应用中,我们可以...

    C# winform上传照片到服务器

    在C# WinForm应用开发中,上传照片到服务器是一个常见的需求,这涉及到客户端与服务器之间的文件传输技术。本文将深入探讨如何实现这个功能,以及如何根据要求修改照片的名字。 首先,我们需要了解C#中的文件操作...

    C# WinForm 上传图片 文件到服务器的方法Uploader ashx.txt

    这是ASP.NET Web Handler的定义,指明了该文件使用的编程语言是C#,并且类名为`Uploader`。 ```csharp public class Uploader : IHttpHandler { public void ProcessRequest(HttpContext hc) { foreach (string ...

    winform上传文件到服务器

    服务器端应设置一个支持文件上传的Web API接口,比如ASP.NET Web API。接口通常会接收`Multipart/form-data`类型的POST请求,这样可以方便地传递文件数据。 在客户端,使用`HttpClient.PostAsync`方法来发送POST...

    海康视频调用(asp.net及winform)

    海康威视作为全球领先的视频监控产品供应商和解决方案服务商,提供了丰富的API和SDK供开发者集成到自己的应用程序中,如ASP.NET和WinForm项目。本文将深入探讨如何在C#环境下利用海康的SDK进行视频调用,并通过具体...

    从零基础入门进行讲解:C#,WINFORM,ADO.NET,ASP.NET的教学视频v2

    通过学习,你可以了解如何使用C#编写代码,如何用WinForms构建桌面应用,如何利用ADO.NET连接和操作数据库,以及如何使用ASP.NET构建Web应用。这些技能对于进入IT行业,尤其是.NET开发领域,是非常重要的。

    C# winform .net图片管理系统

    这通常由ASP.NET Web API或ASP.NET Core MVC实现,定义HTTP POST和GET方法,接收上传的图片数据并返回下载链接。 六、运行环境 本系统需要在支持.NET Framework 3.5或更高版本的环境中运行,例如Visual Studio 2008...

    Web Api 通过文件流 下载文件到本地实例

    这通常涉及到文件系统的操作,如`System.IO.File.OpenRead()`,用于打开一个文件流。 7. **异步编程**: 为了提高性能,Web API控制器方法常常使用异步编程,如`async`和`await`关键字,以避免阻塞线程,尤其是在...

    C#_Winform表单上传文件.rar

    这通常涉及到设置一个Web服务(如ASP.NET Web API或ASP.NET MVC)来接收文件并存储在服务器上。服务器端的实现取决于你所使用的框架和技术,但基本思路是创建一个接受POST请求的控制器方法,该方法接收文件并将其...

    C#写winform调用webservice例子(经典)

    在C#中,我们可以使用.NET Framework提供的ASMX(ASP.NET Web服务)或WCF(Windows Communication Foundation)来创建和消费Web服务。 在本例中,我们将创建一个WinForm客户端,该客户端将调用一个公开的天气预报...

    AES128加密解密、C#、 asp.net、winform、kokketiny、AES128、C.txt.7z

    在提供的文件列表中,“AES128加密解密、C#、asp.net、winform、kokketiny、AES128、C.txt”可能是包含详细代码示例或者教程的文本文件,涵盖了使用这些技术实现AES128加密解密的方法。如果你需要具体实现细节,你...

    c#技术实例大全(asp.net,winform,Remoting等)开源

    《C#技术实例大全》是一本全面覆盖C#在不同领域的应用实例的开源资源,尤其在ASP.NET、WinForm和Remoting等方面提供了丰富的实践案例。这些实例不仅有助于开发者加深对C#语言的理解,还能帮助他们在实际项目开发中...

    Webform与Winform交互

    Webform与Winform交互是.NET框架中的一种技术融合,它允许Windows桌面应用程序(Winform)与Web应用程序(Webform)之间进行数据交换和控制通信。这种交互方式在开发跨平台解决方案时尤其有用,例如需要在桌面客户端...

    C# winform上传图片到服务器代码(可直接用).rar

    服务器端的实现可能基于各种技术,如ASP.NET Web API或ASP.NET Core。 7. **错误处理**: 在客户端和服务器端,都需要处理可能出现的错误,如网络中断、文件读取失败等。C#的异常处理机制(try-catch-finally)可以...

    一个基于ASP.NET+C#实现的Color Picker Web Server Control

    "一个基于ASP.NET+C#实现的Color Picker Web Server Control" 指的是一个使用ASP.NET框架和C#编程语言开发的Web服务器控件,专门用于颜色选择功能。在网页设计中,Color Picker是允许用户从多种颜色中选取所需颜色的...

Global site tag (gtag.js) - Google Analytics