2015-02-17 77 views
0

我有一个curl语句,它有-F。我需要为cURL -F做些什么?通过将以下代码添加到下面的代码中,我已经能够通过将-b传递到标题来获得工作request.Headers.Add(HttpRequestHeader.Cookie, (header));curl -F c#上传文件

要将documentfile和xml添加到内容变量中,我会执行以下操作,但这不起作用并给出错误。根据供应商的规格,你必须在xml =和数据之间有一个空格。

byte[] byteData = Bytes.Combine(Bytes.ConvertToBytesUTF8("documentFile="), File.ReadAllBytes(file)); 
string postData = new StreamReader(file2).ReadToEnd(); 
postData = string.Format(postData, documentpath,folderid); 
byteData = Bytes.Combine(byteData,Bytes.ConvertToBytesUTF8("xml= ")); 
byteData = Bytes.Combine(byteData,Bytes.ConvertToBytesUTF8(postData); 
byte[] content = byteData; 

public class Bytes 
{ 
    public static byte[] ConvertToBytesUTF8(string postData) 
    { 
     byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(postData); 
     return byteArray; 
    } 

    public static byte[] Combine(params byte[][] arrays) 
    { 
     byte[] rv = new byte[arrays.Sum(a => a.Length)]; 
     int offset = 0; 
     foreach (byte[] array in arrays) 
     { 
      System.Buffer.BlockCopy(array, 0, rv, offset, array.Length); 
      offset += array.Length; 
     } 
     return rv; 
    } 
} 

如果卷曲包含-d代替-FI一直在做下面的内容字节传递到变量content然而,在任何卷曲我不得不使用它只有过1 -d所以我从来没有像上面所做的那样结合字节。

request = WebRequest.Create(connectionstring); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
if (content != null) 
{ 
    request.ContentLength = content.Length; 
} 

Stream dataStream = request.GetRequestStream(); 

if (content!=null && content.Length > 0) 
{ 
    dataStream.Write(content, 0, content.Length); 
} 

dataStream.Close(); 

WebResponse response = request.GetResponse(); 

dataStream = response.GetResponseStream(); 

StreamReader reader = new StreamReader (dataStream); 

string responseReader = reader.ReadToEnd(); 

reader.Close(); 
dataStream.Close(); 
response.Close(); 

return responseReader; 

我需要为cURL -F做些什么?我尝试使用将数据传递到标题和请求中的方法,并且都没有用于传递-F字段。我从接收器收到错误Ill-formed request parameter cannot be converted to Java field type.它说问题出在documentFile上。我还将documentFile和xml部分的两个字节紧接在一起。这是问题吗?我需要在两者之间的某种分隔符吗?这也是我第一次有多个文件一次通过。

下面是一个使用WebRequest

curl -k -X POST 
-b "ssoGlobalSessionID=YOUR_SESSION_ID" 
–F "[email protected]/Users/User/Test.PDF" 
–F "xml=XML_REQUEST.XML" 
"url" 
+0

听起来像它可能是一个编码的问题。你可以发布数据类型以及如何填充内容变量? – NightOwl888 2015-02-17 21:57:11

+0

已更新代码。显示我如何将文件组合成字节。 – 2015-02-18 13:53:58

回答

0

要复制的卷曲

curl -k -X POST 
-b "ssoGlobalSessionID=YOUR_SESSION_ID" 
–F "[email protected]:/Users/User/Test.PDF" 
–F "xml=XML_REQUEST.XML" 
"url" 

这本声明卷曲声明我感兴趣再现的是,工作在C#

StringBuilder contents = new StringBuilder(); 
byte[] content=null; 
string header = "ssoGlobalSessionID=YOUR_SESSION_ID"; 
string documentfile = "c:/Users/User/Test.PDF"; 
string filename = Path.GetFileName(file); 
static string boundary = Guid.NewGuid().ToString(); 
WebRequest request = WebRequest.Create(url); 
request.Method = "POST"; 
request.ContentType = string.Format("multipart/form-data; boundary={0}, boundary); 
request.Headers.Add(HttpRequestHeader.Cookie, header); 
AddContentFileCurl(File.ReadAllBytes(documentfile), "documentFile", filename); 
AddContentFormCurl(System.Text.Encoding.ASCII.GetBytes("XMLMARKUP"),"xml"); 
LastFileAddedCurl(); 
if (content != null) 
{ 
    request.ContentLength = content.Length; 
} 

Stream dataStream = request.GetRequestStream(); 

if (content!=null && content.Length > 0) 
{ 
    dataStream.Write(content, 0, content.Length); 
} 

dataStream.Close(); 

WebResponse response = request.GetResponse(); 

dataStream = response.GetResponseStream(); 

StreamReader reader = new StreamReader (dataStream); 

string responseReader = reader.ReadToEnd(); 

reader.Close(); 
dataStream.Close(); 
response.Close(); 
代码

我为此创建的3个方法和我从另一个帖子获得的一个类为MIMET下面复制了ypes。

public void AddContentFileCurl(byte[] file, string name, string filename) 
    { 
     string header = string.Format("--{0}", boundary); 
     string fileContentType = MIMEAssistant.GetMIMEType(filename);      
     contents.AppendLine(header); 
     string fileHeader=String.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"",name,filename); 
     string fileData = Encoding.UTF8.GetString(file); 
     contents.AppendLine(fileHeader); 
     contents.AppendLine(String.Format("Content-Type: {0}", fileContentType)); 
     contents.AppendLine(); 
     contents.AppendLine(fileData); 
    } 

public void AddContentFormCurl(byte[] file, string name) 
    { 
     string header = string.Format("--{0}", boundary); 
     contents.AppendLine(header); 
     string fileHeader = String.Format("Content-Disposition: form-data; name=\"{0}\"", name); 
     string fileData = Encoding.UTF8.GetString(file); 
     contents.AppendLine(fileHeader); 
     contents.AppendLine(); 
     contents.AppendLine(fileData); 
    } 

public void LastFileAddedCurl() 
    { 
     string footer = string.Format("--{0}--", boundary);   
     contents.AppendLine(footer); 
     string cstring = contents.ToString(); 
     byte[] bytes = Encoding.UTF8.GetBytes(cstring); 
     if (content != null) 
     { 
      content = Bytes.Combine(content, bytes); 
     } 
     else 
     { 
      content = bytes; 
     } 
    } 

MIMETYPES

public static class MIMEAssistant 
{ 
    private static readonly Dictionary<string, string> MIMETypesDictionary = new Dictionary<string, string> 
{ 
{"ai", "application/postscript"}, 
{"aif", "audio/x-aiff"}, 
{"aifc", "audio/x-aiff"}, 
{"aiff", "audio/x-aiff"}, 
{"asc", "text/plain"}, 
{"atom", "application/atom+xml"}, 
{"au", "audio/basic"}, 
{"avi", "video/x-msvideo"}, 
{"bcpio", "application/x-bcpio"}, 
{"bin", "application/octet-stream"}, 
{"bmp", "image/bmp"}, 
{"cdf", "application/x-netcdf"}, 
{"cgm", "image/cgm"}, 
{"class", "application/octet-stream"}, 
{"cpio", "application/x-cpio"}, 
{"cpt", "application/mac-compactpro"}, 
{"csh", "application/x-csh"}, 
{"css", "text/css"}, 
{"dcr", "application/x-director"}, 
{"dif", "video/x-dv"}, 
{"dir", "application/x-director"}, 
{"djv", "image/vnd.djvu"}, 
{"djvu", "image/vnd.djvu"}, 
{"dll", "application/octet-stream"}, 
{"dmg", "application/octet-stream"}, 
{"dms", "application/octet-stream"}, 
{"doc", "application/msword"}, 
{"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, 
{"dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"}, 
{"docm","application/vnd.ms-word.document.macroEnabled.12"}, 
{"dotm","application/vnd.ms-word.template.macroEnabled.12"}, 
{"dtd", "application/xml-dtd"}, 
{"dv", "video/x-dv"}, 
{"dvi", "application/x-dvi"}, 
{"dxr", "application/x-director"}, 
{"eps", "application/postscript"}, 
{"etx", "text/x-setext"}, 
{"exe", "application/octet-stream"}, 
{"ez", "application/andrew-inset"}, 
{"gif", "image/gif"}, 
{"gram", "application/srgs"}, 
{"grxml", "application/srgs+xml"}, 
{"gtar", "application/x-gtar"}, 
{"hdf", "application/x-hdf"}, 
{"hqx", "application/mac-binhex40"}, 
{"htm", "text/html"}, 
{"html", "text/html"}, 
{"ice", "x-conference/x-cooltalk"}, 
{"ico", "image/x-icon"}, 
{"ics", "text/calendar"}, 
{"ief", "image/ief"}, 
{"ifb", "text/calendar"}, 
{"iges", "model/iges"}, 
{"igs", "model/iges"}, 
{"jnlp", "application/x-java-jnlp-file"}, 
{"jp2", "image/jp2"}, 
{"jpe", "image/jpeg"}, 
{"jpeg", "image/jpeg"}, 
{"jpg", "image/jpeg"}, 
{"js", "application/x-javascript"}, 
{"kar", "audio/midi"}, 
{"latex", "application/x-latex"}, 
{"lha", "application/octet-stream"}, 
{"lzh", "application/octet-stream"}, 
{"m3u", "audio/x-mpegurl"}, 
{"m4a", "audio/mp4a-latm"}, 
{"m4b", "audio/mp4a-latm"}, 
{"m4p", "audio/mp4a-latm"}, 
{"m4u", "video/vnd.mpegurl"}, 
{"m4v", "video/x-m4v"}, 
{"mac", "image/x-macpaint"}, 
{"man", "application/x-troff-man"}, 
{"mathml", "application/mathml+xml"}, 
{"me", "application/x-troff-me"}, 
{"mesh", "model/mesh"}, 
{"mid", "audio/midi"}, 
{"midi", "audio/midi"}, 
{"mif", "application/vnd.mif"}, 
{"mov", "video/quicktime"}, 
{"movie", "video/x-sgi-movie"}, 
{"mp2", "audio/mpeg"}, 
{"mp3", "audio/mpeg"}, 
{"mp4", "video/mp4"}, 
{"mpe", "video/mpeg"}, 
{"mpeg", "video/mpeg"}, 
{"mpg", "video/mpeg"}, 
{"mpga", "audio/mpeg"}, 
{"ms", "application/x-troff-ms"}, 
{"msh", "model/mesh"}, 
{"mxu", "video/vnd.mpegurl"}, 
{"nc", "application/x-netcdf"}, 
{"oda", "application/oda"}, 
{"ogg", "application/ogg"}, 
{"pbm", "image/x-portable-bitmap"}, 
{"pct", "image/pict"}, 
{"pdb", "chemical/x-pdb"}, 
{"pdf", "application/pdf"}, 
{"pgm", "image/x-portable-graymap"}, 
{"pgn", "application/x-chess-pgn"}, 
{"pic", "image/pict"}, 
{"pict", "image/pict"}, 
{"png", "image/png"}, 
{"pnm", "image/x-portable-anymap"}, 
{"pnt", "image/x-macpaint"}, 
{"pntg", "image/x-macpaint"}, 
{"ppm", "image/x-portable-pixmap"}, 
{"ppt", "application/vnd.ms-powerpoint"}, 
{"pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"}, 
{"potx","application/vnd.openxmlformats-officedocument.presentationml.template"}, 
{"ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"}, 
{"ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12"}, 
{"pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"}, 
{"potm","application/vnd.ms-powerpoint.template.macroEnabled.12"}, 
{"ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"}, 
{"ps", "application/postscript"}, 
{"qt", "video/quicktime"}, 
{"qti", "image/x-quicktime"}, 
{"qtif", "image/x-quicktime"}, 
{"ra", "audio/x-pn-realaudio"}, 
{"ram", "audio/x-pn-realaudio"}, 
{"ras", "image/x-cmu-raster"}, 
{"rdf", "application/rdf+xml"}, 
{"rgb", "image/x-rgb"}, 
{"rm", "application/vnd.rn-realmedia"}, 
{"roff", "application/x-troff"}, 
{"rtf", "text/rtf"}, 
{"rtx", "text/richtext"}, 
{"sgm", "text/sgml"}, 
{"sgml", "text/sgml"}, 
{"sh", "application/x-sh"}, 
{"shar", "application/x-shar"}, 
{"silo", "model/mesh"}, 
{"sit", "application/x-stuffit"}, 
{"skd", "application/x-koan"}, 
{"skm", "application/x-koan"}, 
{"skp", "application/x-koan"}, 
{"skt", "application/x-koan"}, 
{"smi", "application/smil"}, 
{"smil", "application/smil"}, 
{"snd", "audio/basic"}, 
{"so", "application/octet-stream"}, 
{"spl", "application/x-futuresplash"}, 
{"src", "application/x-wais-source"}, 
{"sv4cpio", "application/x-sv4cpio"}, 
{"sv4crc", "application/x-sv4crc"}, 
{"svg", "image/svg+xml"}, 
{"swf", "application/x-shockwave-flash"}, 
{"t", "application/x-troff"}, 
{"tar", "application/x-tar"}, 
{"tcl", "application/x-tcl"}, 
{"tex", "application/x-tex"}, 
{"texi", "application/x-texinfo"}, 
{"texinfo", "application/x-texinfo"}, 
{"tif", "image/tiff"}, 
{"tiff", "image/tiff"}, 
{"tr", "application/x-troff"}, 
{"tsv", "text/tab-separated-values"}, 
{"txt", "text/plain"}, 
{"ustar", "application/x-ustar"}, 
{"vcd", "application/x-cdlink"}, 
{"vrml", "model/vrml"}, 
{"vxml", "application/voicexml+xml"}, 
{"wav", "audio/x-wav"}, 
{"wbmp", "image/vnd.wap.wbmp"}, 
{"wbmxl", "application/vnd.wap.wbxml"}, 
{"wml", "text/vnd.wap.wml"}, 
{"wmlc", "application/vnd.wap.wmlc"}, 
{"wmls", "text/vnd.wap.wmlscript"}, 
{"wmlsc", "application/vnd.wap.wmlscriptc"}, 
{"wrl", "model/vrml"}, 
{"xbm", "image/x-xbitmap"}, 
{"xht", "application/xhtml+xml"}, 
{"xhtml", "application/xhtml+xml"}, 
{"xls", "application/vnd.ms-excel"},       
{"xml", "application/xml"}, 
{"xpm", "image/x-xpixmap"}, 
{"xsl", "application/xml"}, 
{"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, 
{"xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"}, 
{"xlsm","application/vnd.ms-excel.sheet.macroEnabled.12"}, 
{"xltm","application/vnd.ms-excel.template.macroEnabled.12"}, 
{"xlam","application/vnd.ms-excel.addin.macroEnabled.12"}, 
{"xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12"}, 
{"xslt", "application/xslt+xml"}, 
{"xul", "application/vnd.mozilla.xul+xml"}, 
{"xwd", "image/x-xwindowdump"}, 
{"xyz", "chemical/x-xyz"}, 
{"zip", "application/zip"} 
}; 

public static string GetMIMEType(string fileName) 
{ 
     //get file extension 
     string extension = Path.GetExtension(fileName).ToLowerInvariant(); 

     if (extension.Length > 0 && 
      MIMETypesDictionary.ContainsKey(extension.Remove(0, 1))) 
     { 
      return MIMETypesDictionary[extension.Remove(0, 1)]; 
     } 
     return "unknown/unknown"; 
} 
}