Качете изображение от мобилно устройство на отдалечен сървър с помощта на 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 за cordova.

Забележка: Тествах уеб услугата за качване на изображения, използвайки стандартния контрол за качване на файлове, използвайки „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, все още използвайки cordova-3, той ще работи правилно. Това наистина е мистерия и само Telerik може да ни обясни какво правят!

Чао Марко

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