2014-11-08 21 views
5

tôi cố gắng tạo ứng dụng CRUD góc cạnh giống như "dropbox". Vì vậy, nó phải có tập tin và thư mục lưu trữ với chức năng chia sẻ và truy cập. Tôi đang mắc kẹt trên một câu hỏi làm thế nào để tải lên các tập tin hình ảnh và video? Tôi đã sử dụng File API (FileReader, Blob) để tạo bản xem trước các tệp ở phía máy khách nhưng tôi không có ý tưởng cách POST loại dữ liệu này đến máy chủ.tải tệp lên dịch vụ RESTful trong angularjs

+0

Sử dụng [FormData] (https://developer.mozilla.org/en-US/docs/Web/API/FormData) – aarosil

+0

Vì vậy, tôi phải tạo đối tượng FormData và sau đó chèn dữ liệu vào nó và gửi đối tượng FormData đến API của tôi? –

+0

Chính xác, tôi có thể đăng câu trả lời chi tiết hơn bằng mã mẫu nếu bạn muốn. – aarosil

Trả lời

6

Something như thế này nên làm việc tốt để gửi như multipart/form-data yêu cầu phụ trợ API:

var file = ... // get from file input; 
var backendUrl = ... 
var fd = new FormData(); 

fd.append('myFile', file, 'filename.ext'); 

$http.post(backendUrl, fd, { 
    // this cancels AngularJS normal serialization of request 
    transformRequest: angular.identity, 
    // this lets browser set `Content-Type: multipart/form-data` 
    // header and proper data boundary 
    headers: {'Content-Type': undefined} 
}) 

.success(function(){ 
    //file was uploaded 
}) 

.error(function(){ 
    //something went wrong 
}); 

Xem ở đây để tham khảo:

FormData API Doc

Using FormData Objects (MDN)

multipart-formdata file upload with AngularJS

+0

Nó rất hữu ích. Cảm ơn sự giúp đỡ của bạn. –

+0

giải pháp đơn giản nhất mà interwebs cung cấp, nhờ – FloydThreepwood

+1

Làm thế nào để bạn điền vào tệp "varialble"? Tôi mena, làm thế nào để ràng buộc nó vào kiểm soát đầu vào? – Nemus

0

Bạn có thể tải lên tệp bằng cách sử dụng lệnh ngFileUpload hoặc angularFileUpload.

Trong trường hợp angularFileUpload, bạn sử dụng .upload trong điều khiển và trong trường hợp ngFileUpload, bạn sử dụng .http

Ngoài ra, bạn cũng có thể sử dụng application/x-www-form-urlencoded nội dung thay vì gõ multipart cung cấp tập tin của bạn không phải là rất lớn. Trong trường hợp của ứng dụng/x-www-form-urlencoded, bạn chỉ có thể nhận được giá trị trong phần còn lại webservice như InputStream bình thường do đó đòi hỏi không cần marshalling dữ liệu đa.

Bạn có thể tham khảo dưới đây cho những cách có thể tải lên tập tin sử dụng js góc và dịch vụ web còn lại:

http://technoguider.com/2015/08/file-upload-using-angular-js-and-rest-web-service/

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