剛實習的時候遇到一個問題:上傳文件的URL有特定格式限制,需要按格式定義頭信息,才能上傳成功。查資料時候當時好像是java版本的,C#代碼貼上。
//uploadFile:上傳文件名 groupId:GUID public string FileUpload(string uploadFile, string groupId) { //從流中讀取字節塊並將該數據寫入給定緩沖區buffer中 FileStream fileStream = new FileStream(uploadFile, FileMode.Open, FileAccess.Read); Byte[] buffer = new Byte[fileStream.Length]; fileStream.Read(buffer, 0, Convert.ToInt32(fileStream.Length)); //boundary setting string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); string fileName = Path.GetFileName(uploadFile); string nameOnly = fileName.Substring(0, fileName.LastIndexOf(".")); Dictionary<string, string> Params = new Dictionary<string, string>(); Params.Add("name", fileName); Params.Add("groupId", groupId); Params.Add("appModule", "portal"); Params.Add("filePath", ""); Params.Add("thumbnail", "true"); Params.Add("storeType", "1"); Params.Add("property1", ""); Params.Add("property2", ""); Params.Add("property3", ""); Params.Add("property4", ""); Params.Add("property5", ""); Params.Add("flag", "false"); StringBuilder sb = new StringBuilder(); //發送必要字段 foreach (KeyValuePair<string, string> param in Params) { sb = sb.Append("--"); sb = sb.Append(boundary); sb = sb.Append("\r\n"); sb = sb.Append("Content-Disposition: form-data; name=\"" + param.Key + "\"\r\n\r\n"); sb = sb.Append(param.Value); sb = sb.Append("\r\n"); } //要發送的文件 sb = sb.Append("--"); sb = sb.Append(boundary); sb = sb.Append("\r\n"); sb = sb.Append("Content-Disposition: form-data; name=\"" + nameOnly + "\"; filename=\"" + fileName + "\"\r\n"); sb = sb.Append("Content-Type: application/octet-stream\r\n\r\n"); byte[] data = Encoding.Default.GetBytes(sb.ToString()); byte[] end_data = Encoding.Default.GetBytes(("\r\n--" + boundary + "--\r\n")); Uri uri = new Uri("上傳文件地址"); HttpWebRequest webRequset = (HttpWebRequest)WebRequest.Create(uri); webRequset.ContentType = "multipart/form-data; boundary=" + boundary; webRequset.Method = "POST"; //長度屬性:頭+文件流+尾的長度 long length = data.Length + buffer.Length + end_data.Length; webRequset.ContentLength = length; Stream requestStream = webRequset.GetRequestStream(); //將拼接的數據和文件流寫入 requestStream.Write(data, 0, data.Length); requestStream.Write(buffer, 0, buffer.Length); requestStream.Write(end_data, 0, end_data.Length); //獲取返回信息 WebResponse responce = webRequset.GetResponse(); Stream responeStream = responce.GetResponseStream(); StreamReader sr = new StreamReader(responeStream); return sr.ReadToEnd(); }