2015-05-29 71 views
17

我正在研究离子聊天应用程序,用户可以将照片作为其消息的一部分上载。我正在寻找一种方法将图像上传到我的虚拟主机服务器,以便以后通过URL检索。从相机/照片库上载离子应用程序图像

问题是我无法将它上传到我的网络服务器。

我使用这两个插件:

  • org.apache.cordova.file转移
  • 科尔多瓦 - 插件相机

当我运行在Xcode模拟器应用程序和从设备光盘库中选择一张照片,控制台给我以下信息:

  • File Transfer Finished with response code 200
  • void SendDelegateMessage(NSInvocation *): delegate (webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode>
  • SUCCESS: ""

这是我目前使用的代码:

app.controller('HomeController', function($rootScope, $scope, $cordovaCamera, $ionicActionSheet, $cordovaFileTransfer){ ... 

// open PhotoLibrary 
    $scope.openPhotoLibrary = function() { 
     var options = { 
      quality: 100, 
      destinationType: Camera.DestinationType.FILE_URI, 
      sourceType: Camera.PictureSourceType.PHOTOLIBRARY, 
      allowEdit: true, 
      encodingType: Camera.EncodingType.JPEG, 
      popoverOptions: CameraPopoverOptions, 
      saveToPhotoAlbum: false 
     }; 

     $cordovaCamera.getPicture(options).then(function(imageData) { 

      //console.log(imageData); 
      //console.log(options); 

      var url = "http://mydomein.com/upload.php"; 
      //target path may be local or url 
      var targetPath = imageData; 
      var filename = targetPath.split("/").pop(); 
      var options = { 
       fileKey: "file", 
       fileName: filename, 
       chunkedMode: false, 
       mimeType: "image/jpg" 
      }; 
      $cordovaFileTransfer.upload(url, targetPath, options).then(function(result) { 
       console.log("SUCCESS: " + JSON.stringify(result.response)); 
       alert("success"); 
       alert(JSON.stringify(result.response)); 
      }, function(err) { 
       console.log("ERROR: " + JSON.stringify(err)); 
       alert(JSON.stringify(err)); 
      }, function (progress) { 
       // constant progress updates 
       $timeout(function() { 
        $scope.downloadProgress = (progress.loaded/progress.total) * 100; 
       }) 
      }); 

     }, function(err) { 
      // error 
      console.log(err); 
     }); 
    } 


这是我的upload.php的文件:

<?php 
// move_uploaded_file($_FILES["file"]["tmp_name"], $cwd . '/files/images/'); 
move_uploaded_file($_FILES["file"]["tmp_name"], "/files/images"); 
?> 

回答

19

经过一番挖掘和尝试,我终于得到它的工作。

这是我想出了代码:

// open PhotoLibrary 
    $scope.openPhotoLibrary = function() { 
     var options = { 
      quality: 50, 
      destinationType: Camera.DestinationType.FILE_URI, 
      sourceType: Camera.PictureSourceType.PHOTOLIBRARY, 
      allowEdit: true, 
      encodingType: Camera.EncodingType.JPEG, 
      popoverOptions: CameraPopoverOptions, 
      saveToPhotoAlbum: false 
     }; 

     $cordovaCamera.getPicture(options).then(function(imageData) { 

      //console.log(imageData); 
      //console.log(options); 
      var image = document.getElementById('tempImage'); 
      image.src = imageData; 

      var server = "http://yourdomain.com/upload.php", 
       filePath = imageData; 

      var date = new Date(); 

      var options = { 
       fileKey: "file", 
       fileName: imageData.substr(imageData.lastIndexOf('/') + 1), 
       chunkedMode: false, 
       mimeType: "image/jpg" 
      }; 

      $cordovaFileTransfer.upload(server, filePath, options).then(function(result) { 
       console.log("SUCCESS: " + JSON.stringify(result.response)); 
       console.log('Result_' + result.response[0] + '_ending'); 
       alert("success"); 
       alert(JSON.stringify(result.response)); 

      }, function(err) { 
       console.log("ERROR: " + JSON.stringify(err)); 
       //alert(JSON.stringify(err)); 
      }, function (progress) { 
       // constant progress updates 
      }); 


     }, function(err) { 
      // error 
      console.log(err); 
     }); 
    } 

和域服务器上upload.php的代码:

<?php 

// if you want to find the root path of a folder use the line of code below: 
//echo $_SERVER['DOCUMENT_ROOT'] 


if ($_FILES["file"]["error"] > 0){ 
echo "Error Code: " . $_FILES["file"]["error"] . "<br />"; 
} 
else 
{ 
echo "Uploaded file: " . $_FILES["file"]["name"] . "<br />"; 
echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
echo "Size: " . ($_FILES["file"]["size"]/1024) . " kilobytes<br />"; 

if (file_exists("/files/".$_FILES["file"]["name"])) 
    { 
    echo $_FILES["file"]["name"] . " already exists. No joke-- this error is almost <i><b>impossible</b></i> to get. Try again, I bet 1 million dollars it won't ever happen again."; 
    } 
else 
    { 
    move_uploaded_file($_FILES["file"]["tmp_name"],"/var/www/vhosts/yourdomain.com/subdomains/domainname/httpdocs/foldername/images/".$_FILES["file"]["name"]); 
    echo "Done"; 
    } 
} 
?> 
+0

如果您使用其他服务器,如Node.js和Express.js,那么该怎么办? –

3

应用我是buildi对于一家公司而言,ng具有相同的问题,我们所做的只是将该映像作为base64字符串发布到我们的服务器。然后,您可以简单地从数据库中拉出字符串并将其显示在div中。我们使用NgCordova相机,然后只传入takePhoto函数中的数据。

$scope.takePhoto = function() { 
      $ionicScrollDelegate.scrollTop(); 
      console.log('fired camera'); 
      $scope.uploadList = false; 
      $ionicPlatform.ready(function() { 
       var options = { 
        quality: 100, 
        destinationType: Camera.DestinationType.DATA_URL, 
        sourceType: Camera.PictureSourceType.CAMERA, 
        allowEdit: false, 
        encodingType: Camera.EncodingType.PNG, 
        targetWidth: 800, 
        targetHeight: 1100, 
        popoverOptions: CameraPopoverOptions, 
        saveToPhotoAlbum: false 
       }; 
       $cordovaCamera.getPicture(options).then(function (imageData) { 
        $ionicLoading.show({ 
         template: 'Processing Image', 
         duration: 2000 
        }); 
        $scope.image = "data:image/png;base64," + imageData; 
        if (ionic.Platform.isAndroid() === true) { 
         $scope.Data.Image = LZString.compressToUTF16($scope.image); 
         $scope.Data.isCompressed = 1; 
        } else { 
         $scope.Data.Image = $scope.image; 
         $scope.Data.isCompressed = 0; 
        } 
        if ($scope.tutorial) { 
         $scope.showAlert("Instructions: Step 3", '<div class="center">Now that you have taken a photo of the POD form, you must upload it to the server. Press the upload doc button in the bottom right of the screen.</div>'); 
        } 
        $scope.on('') 
       }, function (err) { 
        console.log(err); 
       }); 
      }, false); 
     }; 

$scope.UploadDoc = function() { 
      var req = { 
       method: 'POST', 
       url: ffService.baseUrlAuth + 'cc/upload', 
       headers: { 
        'x-access-token': ffService.token 
       }, 
       data: $scope.Data 
      }; 
      if ($scope.Data.Image === null || $scope.Data.Value === '') { 
       $scope.showAlert("Uh Oh!", '<div class="center">Please take a photo of your document before attempting an upload.</div>'); 
      } else { 
       $http(req).success(function (data, status, headers, config) { 
        localStorage.setItem('tutorial', false); 
        $scope.tutorial = false; 
        $scope.getUploads($scope.PODOrder.OrderNo); 
        $scope.showAlert("Success!", '<div class="center">Your Document has been successfully uploaded!</div>'); 
        $scope.uploadList = true; 
       }).error(function (data, status, headers, config) { 
        $rootScope.$broadcast('loading:hide'); 
        $scope.showAlert("Something went wrong!", '<div class="center">Please make sure you have an internet connection and try again.</div>'); 
       }).then(function(data, status, headers, config){ 
        $scope.Data.Image = null; 
       }); 
      } 
     }; 
+0

嗨,你可以分享的HTML请,还怎么能我传递了授权或令牌。 –

+0

也如何添加我的服务器URL,在哪个部分。 和我需要一个使用PHP或不。 –

相关问题