【问题标题】:How to send image to server on AngularJS?如何在 AngularJS 上将图像发送到服务器?
【发布时间】:2015-11-08 12:43:05
【问题描述】:

我正在尝试将带有一些附加数据的图像发送到服务器。我的问题是图像没有保存在其他记录所在的服务器上。

下面是我的 .html 代码:

<div class="widget uib_w_4 d-margins" data-uib="media/file_input" data-ver="0">
   <input type="file" name="image" id="image" 
      accept="image/jpeg, image/png, image/gif" 
      ng-model="image" class="ng-pristine ng-untouched ng-valid">
</div>
<div class="widget uib_w_5 d-margins" data-uib="media/text" data-ver="0">
   <div class="widget-container left-receptacle"></div>
   <div class="widget-container right-receptacle"></div>
   <div>
      <p>Username:</p>
   </div>
</div>

JS 代码

< script >
var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $http) {
    $scope.SendData = function()
    var data = $.param({
        image: $scope.image,
        username: $scope.username,
    });

    var config = {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded;
                charset = utf - 8;
                '
        }
    }
    var param = getParameterByName('id');
    $http.post('myrurl.php', data, config)
        .success(function(data, status, headers, config) {
        window.location.href = 'view.html';
    })
        .error(function(data, status, header, config) {
        alert('Please retry');
    });
};
}); 
< /script>

我尝试使用 print_r($_REQUEST); 在 PHP 中打印值

image的值为null。

如何将我的图像发送到服务器?

【问题讨论】:

  • 如何处理服务器端的事情?
  • 服务器代码很好我试图通过打印请求检查图像值是否为空白
  • 我在服务器上使用单独的 enpoint 仅用于图像上传。用户必须先上传图片,然后发送表单数据。但无论哪种方式,我都会在将图片发送到服务器之前将其准备为 formData
  • 你可以创建小提琴示例或指导我示例 url,但我不想作为两个请求发送

标签: javascript angularjs


【解决方案1】:

很简单。一个好的方法是对图像进行 Base64 编码,然后将该 Base64 发送到服务器;最好的部分是 PHP 原生支持解码 Base64。

你可以这样做:

<!-- In your HTML file -->
<input type="file" id="file" /> 
<input type="submit" ng-click"uploadFile" value="Upload File"/>

然后,在你的 JavaScript 中:

$("#file").on('change', function(event) {

    var reader = new FileReader();
    reader.onload = function( loadEvent ) {

        $scope.fileData = loadEvent.target.result;
        $scope.$apply();

    };

    reader.readAsDataURL( event.target.files[0] );

});

$scope.uploadFile = function() {

    if ( $scope.fileData === null || $scope.fileData === "" || !($scope.fileData) ) {
        alert("No file has been uploaded");
        return;
    }


    var dtx = eval("(" + atob($scope.fileData.substring("data:application/json;base64,".length)) + ")");

    $http.get( 'yourScript.php?data=' + encodeURIComponent( JSON.stringify(dtx) ) ).then( function(response) {

        if( response.data.status_code == 200 ) {

            // Done!

        } else { ERROR }

    });

};

最后,在您的 PHP 文件中,您可以:

$imageData = base64_decode( $_GET[ 'data' ] ); // Now you have a binary image file. Do whatever you want!

【讨论】:

  • 你能告诉我更多关于错误的信息吗?另外,请记住,此代码只是一个示例。您必须根据需要对其进行编辑。
  • 在我的机器上完美运行!等待。您是否尝试过调试它?你有 jQuery 吗?
  • 这是完整的代码,你需要根据自己的需要进行编辑。我只是给你提供让球滚动所需的信息。
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2014-01-17
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多