我需要將一個函數添加到以C#編寫的現有CGI應用程序中作爲Windows控制檯應用程序。我需要添加一些用戶能夠提交數據文件進行處理的功能。數據文件可以是text/csv文件或各種二進制文件(.xls,.pdf)。我有一個使用字段選擇/提交文件的簡單測試HTML表單。這一切都很好。我可以將文本文件保存在服務器上,而不會出現問題。但是,如何保存二進制文件?我相信這很容易做到,但我一直無法弄清楚。如何保存通過HTML表單域提交的二進制文件?
下面是一些示例代碼,保存文本文件的工作原理:
String formData = Console.In.ReadToEnd();
string boundary = string.Empty;
string[] cPairs = cType.Split(new string[] { "; " }, StringSplitOptions.None);
foreach (string pair in cPairs) {
//finds the 'boundary' text
if (pair.Contains("boundary"))
boundary = "--" + pair.Split('=')[1];
}
//splits on the 'boundary' to get individual form fields/sections
string[] sections = rawParams.Split(new string[] { boundary }, StringSplitOptions.RemoveEmptyEntries);
// parse each section
foreach (string section in sections) {
string[] parts = section.Split(new string[] { "; ", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
if (parts[1].Equals("name=\"dFile\"")) { // 'dFile' is the form field-name for the datafile
//below lines get the filename
Regex regx = new Regex("filename=\"(.+)\"", RegexOptions.IgnoreCase);
Match fPath = regx.Match(parts[2]);
FileInfo fi = new FileInfo(fPath.Groups[1].Value);
regx = new Regex("([-A-Z0-9_ .]+)", RegexOptions.IgnoreCase);
Match fname = regx.Match(fi.Name);
//below lines save the file contents to a text file; starts at index 4 of the 'parts' array
if (fname.Groups[1].Success) {
TextWriter tw = new StreamWriter(fname.Groups[1].Value);
for (int i = 4; i < parts.Length; i++) {
tw.WriteLine(parts[i]);
}
tw.Close();
}
}
else {
// parse other non-file form fields
}
}
的關鍵部分是保存到文件中。我將如何做一個二進制文件?使用正確的編碼
FileStream fs = File.Create(fname.Groups[1].Value, SOME_SIZE, FileOptions.None))
BinaryFormatter formatter = new BinaryFormatter();
...
//inside your loop
string s = parts[i];
formatter.Serialize(fs, Encoding.Unicode.GetBytes(s));
顯然GetBytes()
: 戴夫
CGI應用程序?你有什麼代碼? –
@DaveKub你有什麼代碼?,C#Web或Win App ... – Elyor
我已經添加了一些示例代碼的問題。該應用程序被編寫爲控制檯應用程序。 – DaveKub