2012-02-15 34 views
12

Cách nào tốt hơn để tải lên tệp cho máy khách REST?Tải lên tệp REST bằng HttpRequestMessage hoặc Luồng?

Từ Tài liệu WCF Web API

[WebInvoke(UriTemplate = "thumbnail", Method = "POST")] 
public HttpResponseMessage UploadFile(HttpRequestMessage request) 
{ 

Từ nhiều bài trên diễn đàn:
WCF REST File upload with additional parameters

[WebGet(UriTemplate="", Method ="POST"] 
public string UploadFile(Stream fileContents) 

Tôi hiểu, rằng phương pháp đầu tiên cho phép trực tiếp gửi một tập tin từ một dạng HTML bình thường . Cách tiếp cận thứ 2 có vẻ phổ biến hơn trên tất cả các bài đăng trên diễn đàn mà tôi tìm thấy.

Bạn sẽ đề xuất điều gì và tại sao? REST api có thể truy cập được từ tất cả các loại ngôn ngữ và nền tảng.

Đối với phương pháp HttpRequestMessage, làm cách nào để tải lên tệp có thể thích hợp hơn với HttpClient của WCF? Với FormUrlEncodedMediaTypeFormatter)

Trả lời

2

Phương pháp đầu tiên là "gần với kim loại" và sẽ linh hoạt hơn vì bạn sẽ xử lý các yêu cầu http và tự xây dựng các câu trả lời. Nếu tất cả những gì bạn cần làm là chấp nhận luồng từ khách hàng, tùy chọn thứ hai đơn giản hơn nhiều so với quan điểm thực hiện (dưới mui xe, nó thực hiện công việc tương tự mà phương pháp đầu tiên đang làm)

Tôi không có một câu trả lời cho câu hỏi cuối cùng của bạn.

12

Để kiểm tra phương pháp HttpRequestMessage Tôi đã làm những điều sau đây sử dụng MVC:

xem
public class TestingController : Controller 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Upload() 
    { 
     var file = Request.Files[0]; 
     var filename = Request.Form["filename"]; 
     var uri = string.Format("http://yoururl/serviceRoute/{0}", filename); 
     var client = new HttpClient(); 
     client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/pjpeg")); 
     var content = new StreamContent(file.InputStream); 
     var response = client.PostAsync(uri, content); 
     ViewBag.ServerUri = uri; 
     ViewBag.StatusCode = response.Result.StatusCode.ToString(); 
     return View(); 
    } 

} 

Chỉ số nên có một hình thức trong đó có bài viết về phương pháp lên tức thì. Sau đó, bạn có thể sử dụng HttpClient để tạo kết nối tới dịch vụ REST của bạn.

+0

Cảm ơn Jed, rất tiếc là tôi chỉ có thể chọn một câu trả lời đúng và tôi đã đưa nó cho JCaffeine. Nhưng đã làm một cuộc bỏ phiếu. – Remy

+0

Remy, bạn được chào đón và không phải lo lắng. Chỉ vui vì nó đã giúp bạn ra ngoài. – Jed

Các vấn đề liên quan