在做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的,均可以使用。
分享到:
相关推荐
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用程序(WinForms)和Web服务(ASP.NET)方面。本主题将深入探讨如何在ASP.NET Web服务中调用WinForms应用程序的功能,以实现更复杂的系统集成和...
在实际项目中,可能会结合ASP.NET等Web技术,构建更复杂的服务器端逻辑来处理上传的文件。对于大型文件,还可能需要实现断点续传功能,或者使用异步上传以提升性能。总的来说,这个过程涉及到客户端和服务器端的交互...
本示例中的"WebApi Winform托管"是一个结合了C#的Windows Forms(Winform)和ASP.NET Web API的技术实现,它允许在Winform应用内部托管和调用Web API服务。下面我们将深入探讨这个主题。 **WebAPI**是微软为构建...
《C#编程150例》是一本深入实践的编程指南,涵盖了C#语言、ASP.NET、Winform、WebApplication以及WebService等多个方面的内容。通过学习这些源码实例,读者可以全面掌握C#及其相关框架的实用技能。以下是针对每个...
在"C# WinForm调用WebAPI"的场景中,我们主要涉及到以下几个关键知识点: 1. **C# WinForm编程**:WinForm是.NET Framework的一部分,提供了一个用于创建交互式图形用户界面的平台。在C# WinForm应用中,我们可以...
在C# WinForm应用开发中,上传照片到服务器是一个常见的需求,这涉及到客户端与服务器之间的文件传输技术。本文将深入探讨如何实现这个功能,以及如何根据要求修改照片的名字。 首先,我们需要了解C#中的文件操作...
这是ASP.NET Web Handler的定义,指明了该文件使用的编程语言是C#,并且类名为`Uploader`。 ```csharp public class Uploader : IHttpHandler { public void ProcessRequest(HttpContext hc) { foreach (string ...
服务器端应设置一个支持文件上传的Web API接口,比如ASP.NET Web API。接口通常会接收`Multipart/form-data`类型的POST请求,这样可以方便地传递文件数据。 在客户端,使用`HttpClient.PostAsync`方法来发送POST...
海康威视作为全球领先的视频监控产品供应商和解决方案服务商,提供了丰富的API和SDK供开发者集成到自己的应用程序中,如ASP.NET和WinForm项目。本文将深入探讨如何在C#环境下利用海康的SDK进行视频调用,并通过具体...
通过学习,你可以了解如何使用C#编写代码,如何用WinForms构建桌面应用,如何利用ADO.NET连接和操作数据库,以及如何使用ASP.NET构建Web应用。这些技能对于进入IT行业,尤其是.NET开发领域,是非常重要的。
这通常由ASP.NET Web API或ASP.NET Core MVC实现,定义HTTP POST和GET方法,接收上传的图片数据并返回下载链接。 六、运行环境 本系统需要在支持.NET Framework 3.5或更高版本的环境中运行,例如Visual Studio 2008...
这通常涉及到文件系统的操作,如`System.IO.File.OpenRead()`,用于打开一个文件流。 7. **异步编程**: 为了提高性能,Web API控制器方法常常使用异步编程,如`async`和`await`关键字,以避免阻塞线程,尤其是在...
这通常涉及到设置一个Web服务(如ASP.NET Web API或ASP.NET MVC)来接收文件并存储在服务器上。服务器端的实现取决于你所使用的框架和技术,但基本思路是创建一个接受POST请求的控制器方法,该方法接收文件并将其...
在C#中,我们可以使用.NET Framework提供的ASMX(ASP.NET Web服务)或WCF(Windows Communication Foundation)来创建和消费Web服务。 在本例中,我们将创建一个WinForm客户端,该客户端将调用一个公开的天气预报...
在提供的文件列表中,“AES128加密解密、C#、asp.net、winform、kokketiny、AES128、C.txt”可能是包含详细代码示例或者教程的文本文件,涵盖了使用这些技术实现AES128加密解密的方法。如果你需要具体实现细节,你...
《C#技术实例大全》是一本全面覆盖C#在不同领域的应用实例的开源资源,尤其在ASP.NET、WinForm和Remoting等方面提供了丰富的实践案例。这些实例不仅有助于开发者加深对C#语言的理解,还能帮助他们在实际项目开发中...
Webform与Winform交互是.NET框架中的一种技术融合,它允许Windows桌面应用程序(Winform)与Web应用程序(Webform)之间进行数据交换和控制通信。这种交互方式在开发跨平台解决方案时尤其有用,例如需要在桌面客户端...
服务器端的实现可能基于各种技术,如ASP.NET Web API或ASP.NET Core。 7. **错误处理**: 在客户端和服务器端,都需要处理可能出现的错误,如网络中断、文件读取失败等。C#的异常处理机制(try-catch-finally)可以...
"一个基于ASP.NET+C#实现的Color Picker Web Server Control" 指的是一个使用ASP.NET框架和C#编程语言开发的Web服务器控件,专门用于颜色选择功能。在网页设计中,Color Picker是允许用户从多种颜色中选取所需颜色的...