2015-08-04 2 views
2

В настоящее время я беру изображение камеры, этот формат Base64, и я отправляю через ajax.Как отправить строку/изображение base64 в Sailsjs - Skipper с ajax

xhr({ 
    uri: 'http://localhost:1337/file/upload', 
    method: 'post', 
    body:'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...' 
} 

0 файл (ы) загружен успешно!

+0

Вам нужно подробнее рассказать о своем вопросе. Не совсем понятно, что вы пытаетесь спросить. См. [Как задать хороший вопрос] (https://stackoverflow.com/help/how-to-ask). –

+0

У вас есть решение для этого? На самом деле я застрял в той же проблеме. – Indra

ответ

1

Вот хорошая ссылка, которая поможет вам отправить изображение с Ajax-клиента на сервер ajax.

http://www.nickdesteffen.com/blog/file-uploading-over-ajax-using-html5

Вы можете прочитать эту документацию парусов получать файлы на сервере парусов:

http://sailsjs.org/documentation/reference/request-req/req-file

Вы можете сделать, как в следующем примере:

Client side (ajax): 

var files = []; 

$("input[type=file]").change(function(event) { 
    $.each(event.target.files, function(index, file) { 
    var reader = new FileReader(); 
    reader.onload = function(event) { 
     object = {}; 
     object.filename = file.name; 
     object.data = event.target.result; 
     files.push(object); 
    }; 
    reader.readAsDataURL(file); 
    }); 
}); 

$("form").submit(function(form) { 
    $.each(files, function(index, file) { 
    $.ajax({url: "/ajax-upload", 
      type: 'POST', 
      data: {filename: file.filename, data: file.data}, // file.data is your base 64 
      success: function(data, status, xhr) {} 
    });  
    }); 
    files = []; 
    form.preventDefault(); 
}); 

стороне сервера (паруса): [предположим, у вас есть модель Изображение, которое принимает идентификатор и URL-адрес][здесь образец контроллера изображения, просто чтобы дать вам представление о том]

module.exports = { 
    uploadPicture: function(req, res) { 

    req.file('picture').upload({ 
    // don't allow the total upload size to exceed ~10MB 
    maxBytes: 10000000 
    }, 
    function onDone(err, uploadedFiles) { 


    if (err) { 
     return res.negotiate(err); 
    } 
    // If no files were uploaded, respond with an error. 
    if (uploadedFiles.length === 0){ 
     return res.badRequest('No file was uploaded'); 
    } 



    // Save the "fd" and the url where the avatar for a user can be accessed 
    Picture 
     .update(777, { // give real ID 
     // Generate a unique URL where the avatar can be downloaded. 
     pictureURL: require('util').format('%s/user/pictures/%s', sails.getBaseUrl(), 777), // GIVE REAL ID 
     // Grab the first file and use it's `fd` (file descriptor) 
     pictureFD: uploadedFiles[0].fd 
     }) 
     .exec(function (err){ 
     if (err) return res.negotiate(err); 
     return res.ok(); 
     }); 
    }); 

    } 
}; 

Надеется, что это поможет в ваших исследованиях. Я также рекомендую вам использовать Postman, чтобы сначала проверить ваш API, а затем закодировать своего клиента.

+0

Таким образом, код Serverside одинаковый для загрузки Base64 как для загрузки файлов Multipart? – Suisse

+0

Если вы имеете в виду подгрузку файлов Multipart для отправки кусков файла, допустим, потому что это слишком большой файл, например zip, тогда вам придется внести некоторые изменения на стороне сервера. Прямо сейчас, используя этот код, сервер ожидает полного файла прямо сейчас. В вашем случае вам придется сохранить его в массиве или другой переменной, а затем повторно собрать. Вы также захотите проверить, получили ли вы правильное количество данных, чтобы убедиться, что ваш файл не поврежден. Если вопрос был больше: могу ли я отправить куски файлов в base64, ответ да. –

+0

Оригинальный вопросник запросил загрузку Base64 для Sails. И вы ответили «req.file (« picture »). Upload()» - я использовал эту функцию для загрузки файлов Multipart (в html форме с и кнопкой отправки). В вашем ответе я не вижу функцию преобразования для Base64 String в файл JPG. Вот почему я спрашиваю. спасибо – Suisse

Смежные вопросы