Загрузить изображение с мобильного устройства на удаленный сервер с помощью Icenium Cordova и ASP.NET

Я пытаюсь найти способ загрузить изображение с мобильного телефона на удаленный сервер, используя Icenium + Cordova (мобильный) и ASP.NET.

Я пытался использовать команду FileTransfer() при предоставлении адрес удаленного веб-сервиса, но безуспешно. Я использую симулятор Icenium и Visual Studio для локального тестирования кода.

Что мне нужно, так это пример кода для мобильной (Javascript) и серверной (.NET) стороны для поддержки этой связи загрузки изображений. Спасибо.

Код, который я сейчас использую:

function uploadPhoto(imageURI) { 
    var options = new FileUploadOptions(); 
    options.fileKey="image_file"; // recFile
    var imagefilename = Number(new Date())+".png"; 
    options.fileName=imagefilename; 
    options.mimeType=  "text/plain"; 
    options.chunkedMode = false;

    params = {
        val1: "some value",
        val2: "some other value"
    };
    options.params = params;


    var ft = new FileTransfer(); 

    ft.upload(imageURI,"http://127.0.0.1:1691/ImageWebService.asmx/SaveImage", success, fail, options); 

}

На стороне сервера:

 [WebMethod]
    [ScriptMethod]
    public string SaveImage()
    {
        try
        {
            HttpPostedFile file = HttpContext.Current.Request.Files[0];
            if (file == null)
                return "0";

            HttpPostedFile file =
            HttpContext.Current.Request.Files[0];
            string targetFilePath = "c:\\" + file.FileName;
            file.SaveAs(targetFilePath);
        }
        catch (Exception ex)
        {
        }

        return "1";

    }

У меня тоже есть:

<access origin="*" />

В config.xml для кордовы.

Примечание. Я протестировал веб-сервис для загрузки изображений, используя стандартный элемент управления загрузкой файлов с помощью «Advanced Rest Client», и он вернул 200 OK.

Кроме этого, я застрял и могу найти способ успешно загрузить изображение на удаленный сервер. Я открыт для использования другого метода, но я думаю, что использование собственного Cordova FileTransfer() является более безопасным способом сделать это, если я хочу лучшей сопоставимости.


person Idan Shechter    schedule 12.10.2013    source источник


Ответы (2)


Вы должны использовать имя машины, и ваше устройство должно быть подключено к той же сети. Ваше устройство не может узнать, что такое 127.0.0.1, так как это петлевой адрес. Всегда проверяйте свои службы, пытаясь получить к ним доступ из браузера с другого компьютера. Версия Cordova здесь ни при чем, Icenium уже сейчас предоставляет все API устройств, нет необходимости включать их вручную как отдельные плагины.

person silverchair    schedule 14.10.2013

Я предполагаю, что вы пытаетесь скомпилировать Cordova версии 3. Насколько я понял, в Cordova-3 большая часть API на уровне устройства была перемещена во внешние плагины: прочитайте «Доступ к функции» в http://cordova.apache.org/docs/en/3.0.0/cordova_file_file.md.html#File

Так что в Icenium это уже не работает. Если вы попытаетесь зайти в свойства проекта и установить cordova 2.7.0, все будет работать.

Чтобы быть уверенным, добавьте эту строку в свой основной javascript в событии deviceready:

alert("deviceReady!");
alert(device.platform);

если вы получите оба предупреждающих сообщения, приложение работает правильно, а также будет работать передача файлов.

Но если вы импортируете проект File-Transfer GitHub в Icenium, все еще используя кордову-3, он будет работать корректно. Это действительно тайна, и только Телерик может объяснить нам, что они делают!

Чао Марко

person Giox    schedule 13.10.2013
comment
Используя 3.0, я получил два предупреждения. Я попытался перейти на 2.7, а также на 3.0 + установленный плагин в папке плагинов, но загрузка изображений все еще не работает :[ - person Idan Shechter; 13.10.2013