2010-10-07 21 views
7

Tôi chỉ đang cố gắng viết trình phân tích cú pháp nhiều lần nhưng mọi thứ trở nên phức tạp và muốn hỏi xem có ai biết về trình phân tích cú pháp sẵn sàng trong C# không!Có phân tích cú pháp đa phần/biểu mẫu nào trong C# - (NO ASP)

Chỉ cần làm rõ, tôi đang viết máy chủ http "nhỏ" của riêng mình và cũng cần phải phân tích cú pháp nhiều dữ liệu biểu mẫu!

Cảm ơn trước, Gohlool

+0

Những gì bạn muốn để phân tích? – Nayan

+0

Vâng, tôi đang phân tích luồng đa luồng/dữ liệu biểu mẫu nhận được từ trình duyệt bằng cách tải lên một tệp và một số trường! – Gohlool

+0

Có, có: http://stackoverflow.com/questions/7460088/reading-file-input-from-a-multipart-form-data-post/21689347#21689347 (mặc dù nó có ASP.NET trong tên bạn có thể sử dụng nó ở bất cứ đâu, cụ thể là bạn không cần chạy dưới ASP.NET) –

Trả lời

23

tôi mở mã nguồn C# hình thức Http phân tích cú pháp here.

Điều này hơi linh hoạt hơn so với cái khác được đề cập trên CodePlex, vì bạn có thể sử dụng nó cho cả Multipart và Non-Multipart form-data và cũng cung cấp cho bạn các tham số biểu mẫu khác được định dạng trong đối tượng Dictionary.

này có thể được sử dụng như sau:

phi nhiều phần dữ liệu

public void Login(Stream stream) 
{ 
    string username = null; 
    string password = null; 

    HttpContentParser parser = new HttpContentParser(stream); 
    if (parser.Success) 
    { 
     username = HttpUtility.UrlDecode(parser.Parameters["username"]); 
     password = HttpUtility.UrlDecode(parser.Parameters["password"]); 
    } 
} 

nhiều phần dữ liệu

public void Upload(Stream stream) 
{ 
    HttpMultipartParser parser = new HttpMultipartParser(stream, "image"); 

    if (parser.Success) 
    { 
     string user = HttpUtility.UrlDecode(parser.Parameters["user"]); 
     string title = HttpUtility.UrlDecode(parser.Parameters["title"]); 

     // Save the file somewhere 
     File.WriteAllBytes(FILE_PATH + title + FILE_EXT, parser.FileContents); 
    } 
} 
+0

Cảm ơn rất nhiều vì câu trả lời của bạn! Tôi sẽ cố gắng để kiểm tra nó và hy vọng rằng sẽ hỗ trợ định dạng đa/hỗn hợp quá! – Gohlool

+1

@Gohlool có, HttpMultipartParser hỗ trợ đa dạng dữ liệu biểu mẫu được hình thành của một số tùy ý các phần văn bản và một phần tệp. Tên của phần chứa tệp cần được chuyển thành đối số thứ hai trong hàm tạo và tệp có thể là bất kỳ loại mime nào. –

+0

Cảm ơn rất nhiều Lorenzo! – Gohlool

6

Tôi đã có một số vấn đề với phân tích cú pháp dựa trên chuỗi phân tích cú pháp đặc biệt với các tệp lớn tôi thấy nó sẽ hết bộ nhớ và không phân tích cú pháp dữ liệu nhị phân a.

Để đối phó với những vấn đề này tôi đã mở nguồn nỗ lực bản thân bằng cách phân tích cú pháp C# multipart/form-data here

Xem câu trả lời của tôi here để biết thêm thông tin.

1

Kiểm tra MultipartStreamProvider mới và các lớp con của nó (ví dụ: MultipartFormDataStreamProvider). Bạn cũng có thể tạo quá trình triển khai của riêng mình nếu không có cài đặt nào được triển khai phù hợp cho trường hợp sử dụng của bạn.

0

Với Core bây giờ bạn có quyền truy cập vào một IFormCollection bằng cách sử dụng HttpContext.Request.Form.

Ví dụ tiết kiệm một hình ảnh:

 Microsoft.AspNetCore.Http.IFormCollection form; 
     form = ControllerContext.HttpContext.Request.Form; 

     using (var fileStream = System.IO.File.Create(strFile)) 
     { 
      form.Files[0].OpenReadStream().Seek(0, System.IO.SeekOrigin.Begin); 
      form.Files[0].OpenReadStream().CopyTo(fileStream); 
     } 
Các vấn đề liên quan