0

我正在使用带有 PhoneGap 的 Eclipse 来开发应用程序。对于运行配置,我使用的是 Android 设备,因为它比使用 AVD 更快。

所以,我想做的是从手机(通过笔记本电脑连接到 Eclipse 的 USB)上传文件到我的本地主机服务器。主要是把文件上传到远程服务器。但至于最初的部分,我只想将它上传到本地主机。

(index.html) 这是我从 HTML 上传的脚本:

<!DOCTYPE html>
<html>
  <head>
    <title>Capture Photo</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    var pictureSource;   // picture source
    var destinationType; // sets the format of returned value

    document.addEventListener("deviceready",onDeviceReady,false);

    function onDeviceReady() {
        pictureSource=navigator.camera.PictureSourceType;
        destinationType=navigator.camera.DestinationType;
    }

    function onPhotoDataSuccess(imageData) {
      var smallImage = document.getElementById('smallImage');

      smallImage.style.display = 'block';

      smallImage.src = "data:image/jpeg;base64," + imageData;

      var options = new FileUploadOptions();
      options.fileKey="file";
      options.fileName=imageData.substr(imageData.lastIndexOf('/')+1);      
      options.mimeType="image/jpeg";
      console.log("Filename: " + options.fileName);
      var params = new Object();
      params.value1 = "test";
      params.value2 = "param";
      options.params = params;
      options.chunkedMode = false;
      var ft = new FileTransfer();
      ft.upload(imageData, "http://127.0.0.1:80/upload_file.php", win, fail, options);
    }

    function capturePhoto() {
      navigator.camera.getPicture(onPhotoDataSuccess, onFail,
        { 
          quality: 50,
          sourceType : Camera.PictureSourceType.CAMERA,
          destinationType: destinationType.DATA_URL
        }
      );
    }

    function win(r) {
      console.log("Code = " + r.responseCode);
      console.log("Response = " + r.response);
      console.log("Sent = " + r.bytesSent);
      alert(r.response);
    }

    function fail(error) {
      alert("An error has occurred: Code = " = error.code);
    }

    function onFail(message) {
      alert('Failed because: ' + message);
    }

    </script>
  </head>
  <body>
    <button onclick="capturePhoto();">Capture Photo</button> <br>
    <img style="display:none;width:300px" id="smallImage" src="" />
    <img style="display:none;" id="largeImage" src="" />

  </body>
</html>

是的,代码的作用是用相机拍摄照片,然后将照片上传到服务器。但我主要关注的是上传它。

(c:/wamp/www/upload.php) 这是服务器端的 php 脚本:

 <?php
if ($_FILES["file"]["error"] > 0) {
  echo "Return Code: " . $_FILES["file"]["error"] . "";
} else {
  echo "Upload: " . $_FILES["file"]["name"] . "";
  echo "Type: " . $_FILES["file"]["type"] . "";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb";
  echo "Temp file: " . $_FILES["file"]["tmp_name"] . "";
  if (file_exists("D:/PHPUPLOAD/" . $_FILES["file"]["name"])) {
    echo $_FILES["file"]["name"] . " already exists. ";
  } else {
    move_uploaded_file($_FILES["file"]["tmp_name"], "C:/PHPUPLOAD/" . $_FILES["file"]["name"]); //Save location
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  }
}
?>

如果我使用 Android 设备而不是 AVD 应该没问题吧?

4

3 回答 3

1

如果您在同一台机器上,您可以使用 127.0.0.1 访问模拟器的主机。如果要到达开发机,可以使用10.0.2.2。

请参阅如何获取 Android Emulator 的 IP 地址?

希望能帮助到你。

于 2013-09-13T13:55:35.877 回答
1

USB 连接不提供对移动设备的网络访问。

要连接到 localhost,请参见:

如何从我的 Android 设备访问我的本地主机?

如果您希望在远程服务器上运行相同的代码,那么 phonegap 可以选择域白名单。

你可以在这里获得更多信息:

http://docs.phonegap.com/en/edge/guide_appdev_whitelist_index.md.html#Domain%20Whitelist%20Guide

于 2013-09-13T14:18:34.687 回答
1

我终于找到了解决问题的方法。我忘了提到我的设备和笔记本电脑在同一个网络(wifi)内,所以为了让它连接到笔记本电脑的本地主机,我需要找到它的本地 IP 地址。

输入并找到主机cmdipconfigIPv4 地址。例如:

Wireless LAN adapter Wireless Network Connection:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::f0b2:6e7f:53fb:24e8%13
   IPv4 Address. . . . . . . . . . . : 192.168.1.3
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.1

就我而言,它是192.168.1.3.

要使其可见,您需要允许 Apache 服务器接受所有传入请求。为此,请打开 Apache 的httpd.conf文件并修改以下内容:

<Directory "c:/wamp/www">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order Deny,Allow
    Allow from all
</Directory>

测试手机中的 IP 地址。您应该看到 WAMP 主页。

使用此行index.html连接到您的本地主机

ft.upload(imageData, "http://192.168.1.3/upload_file.php", win, fail, options);

对于upload_file.php

<?php
    print_r($_FILES);
    $new_image_name = "namethisimage.jpg";
    move_uploaded_file($_FILES["file"]["tmp_name"], $new_image_name);

    echo "<img width='500px' src='namethisimage.jpg'>";
?>

谢谢大家的回复:)

于 2013-09-17T06:17:49.660 回答