Tôi đang cố tải lên tệp và gửi cùng một vài tham số đến trang web của mình bằng .NET/C#. Sau khi đọc một vài hướng dẫn thực hiện một vài tham số hoặc một tệp, tôi đã thử, không thành công, để kết hợp chúng. Dưới đây là cách tôi cố gắng làm việc đó:WebRequest POST với cả tệp và thông số
WebRequest req = WebRequest.Create(baseURL + "upload");
req.Credentials = new NetworkCredential(username, password);
String boundary = "B0unD-Ary";
req.ContentType = "multipart/form-data; boundary=" + boundary;
req.Method = "POST";
((HttpWebRequest)req).UserAgent = "UploadTester v0.1";
string postData = "--" + boundary + "\nContent-Disposition: form-data\n";
postData += "myId=123&someFk=456";
postData += "\n--" + boundary + "\nContent-Disposition: form-data; name=\"file\" filename=\"upload.pdf\" Content-Type: application/pdf\n\n";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
byte[] filedata = null;
using (BinaryReader reader = new BinaryReader(File.OpenRead("myfile.pdf")))
filedata = reader.ReadBytes((int)reader.BaseStream.Length);
req.ContentLength = byteArray.Length + filedata.Length;
req.GetRequestStream().Write(byteArray, 0, byteArray.Length);
req.GetRequestStream().Write(filedata, 0, filedata.Length);
WebResponse response = req.GetResponse();
Stream data = response.GetResponseStream();
StreamReader sReader = new StreamReader(data);
String sResponse = sReader.ReadToEnd();
response.Close();
Khi tôi thực hiện nó, tôi nhận được một ngoại lệ 500, nói rằng "phần header đã có hơn 10.240 bnytes (có thể nó không bị chấm dứt đúng)" và Wireshark thông báo với tôi rằng yêu cầu đã gửi là gói không đúng định dạng, trong đó đa phần MIME không đúng định dạng.
Có lẽ một số vấn đề ở đây, vì vậy xin vui lòng cho tôi biết tất cả các vấn đề bạn có thể nhận ra
Cập nhật:. Để tách MIME từ C NET # /, tôi đã sinh ra một sợi đây: https://stackoverflow.com/questions/1880002/error-in-mime-packet-for-http-post
Cập nhật 2: Vì vậy, chương trình phụ trợ thực sự có vấn đề với độ dài nội dung, nói rằng số lượng byte có sẵn để đọc nhỏ hơn chiều dài nội dung đã nêu. NHƯNG! Nếu tôi giảm độ dài nội dung trong req.ContentLength cho phù hợp, tôi không có kích thước bộ đệm đủ lớn để gửi dữ liệu. Bất kỳ đề xuất?
Cập nhật 3: Trên thực tế, có vẻ như tiêu đề có kích thước quá lớn so với bao nhiêu dữ liệu mà nó chứa
Nếu bạn đang sử dụng .NET> = 4.0, hãy bỏ qua câu trả lời của tôi để có cách dễ dàng hơn để thực hiện việc này. – Joshcodes