C#版的MS MultiPart/Form-Data

来源:互联网 发布:手机淘宝自定义模块 编辑:程序博客网 时间:2024/05/18 04:10


C#版的MsMultiPartFormData(适用于Silverlight平台上传二进流数据到服务器)
 

在这之前,我已经写过了AS3版本的MsMultiPartFormData,给Flash上传Http的Form用,写过C++版的MultiPartFormData,
给C++的朋友上传Http的Form用。在这里,再写一个C#版本的,呵呵,主要是想给Silverlight用的。

具体代码如何下
(至于Http的multipart/form-data格式,大家还是得去找资料来看看了):

 

************************************************************ 

#region summary 

/*---------------------------------------------------------------------------- 

*  

*

功能描述:

   

核心功能是什么

 

*  

*

   

者:

   

qwliang 

*  

*

修改日期:

   

2010/10/10 

 

*----------------------------------------------------------------------------*/ 

#endregion 

using System;  

using System.Collections; 

using System.Text;  

using System.Collections.Generic; 

namespaceMyRBS 

{  

   

public class MsMultiPartFormData 

   

{  

       

private List<byte>formData;  

       

public String Boundary = "---------------------------7db1851cd1158"; 

       

private String fieldName = "Content-Disposition: form-data; name=\"{0}\""; 

       

private String fileContentType = "Content-Type: {0}";  

       

private String fileField = "Content-Disposition: form-data; name=\"{0}\";

filename=\"{1}\""; 

       

private Encoding encode = Encoding.GetEncoding("UTF-8"); 


 


 




       

publicMsMultiPartFormData() 

       

{  

           

formData = new List<byte>(); 

       

       

public void AddFormField(String FieldName, String FieldValue) 

       

{  

           

String newFieldName = fieldName; 

           

newFieldName = string.Format(newFieldName, FieldName); 

           

formData.AddRange(encode.GetBytes("--" + Boundary + "\r\n")); 

           

formData.AddRange(encode.GetBytes(newFieldName + "\r\n\r\n")); 

           

formData.AddRange(encode.GetBytes(FieldValue + "\r\n")); 

       

       

public void AddFile(String FieldName, String FileName, byte[] FileContent,

String ContentType) 

       

{  

           

String newFileField = fileField;  

           

String newFileContentType = fileContentType; 

           

newFileField = string.Format(newFileField, FieldName, FileName); 

           

newFileContentType = string.Format(newFileContentType, ContentType); 


 


 




           

formData.AddRange(encode.GetBytes("--" + Boundary + "\r\n")); 

           

formData.AddRange(encode.GetBytes(newFileField + "\r\n"));  

           

formData.AddRange(encode.GetBytes(newFileContentType + "\r\n\r\n")); 

           

formData.AddRange(FileContent); 

           

formData.AddRange(encode.GetBytes("\r\n")); 

       

       

public void AddStreamFile(String FieldName, String FileName, byte[]

FileContent) 

       

{  

           

AddFile(FieldName, FileName, FileContent, "application/octet-stream"); 

       

       

public void PrepareFormData() 

       

{  

           

formData.AddRange(encode.GetBytes("--" + Boundary + "--")); 

       

       

public List<byte>GetFormData() 

       

{  

           

return formData; 

       

}  


 


 




   

}  

************************************************************ 

具体的调用例子如下:

 

*********************************************************** 

         

WebRequest request = WebRequest.Create("




http://localhost/Test.aspx");

 

          

MsMultiPartFormData form = new MsMultiPartFormData(); 

          

form.AddFormField("devilField", "

中国人

"); 

          

FileStream file = new FileStream("F:\\\\Devil_Files\\My_File\\devil.jpg",

FileMode.Open);  

          

byte[] bb = new byte[file.Length]; 

          

file.Read(bb, 0, (int)file.Length); 

          

file.Close(); 

          

form.AddStreamFile("fileUpload", "

中国人图片

.jpg", bb); 

          

form.PrepareFormData(); 

          

request.ContentType = "multipart/form-data; boundary=" +

form.Boundary;  

          

request.Method = "POST"; 


0 0
原创粉丝点击