【问题标题】:ngFileUpload on safari posts empty filesafari 上的 ngFileUpload 发布空文件
【发布时间】:2017-02-28 09:04:19
【问题描述】:

我正在使用 ngFileUpload 将图像发送到 cloudinary 服务,我的应用是基于 ionic 构建的,旨在在 ios 和 android 上运行,我有以下代码来上传图像:

.service('photoUploadService', ['$q','Upload', '$ionicLoading', 'AppModel',
	function($q, $upload, $ionicLoading, AppModel){
    // creating a return object with a data property, matching the structure we return from the router resolve
    var ref = this;

    ref.dataURItoBlob = function(dataURI) {
		var contentType = 'image/png';
	  	var sliceSize = 512;

	  	var byteCharacters = atob(dataURI.split(',')[1]);
		  var byteArrays = [];

		  for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
		    var slice = byteCharacters.slice(offset, offset + sliceSize);

		    var byteNumbers = new Array(slice.length);
		    for (var i = 0; i < slice.length; i++) {
		      byteNumbers[i] = slice.charCodeAt(i);
		    }

		    var byteArray = new Uint8Array(byteNumbers);

		    byteArrays.push(byteArray);
		  }
		    
		  var blob = new Blob(byteArrays, {type: contentType});
		  return blob;
	};

    ref.uploadPhoto = function(imageData, waitMessage, sucessCallback, sucessCBParameters){
    	var deferred = $q.defer();

    	var filename = Math.floor(Math.random()*90000) + 10000 + ".png";
		//var imageBase64 = finalAd.ad.image.split(',')[1];
		var blob = ref.dataURItoBlob(imageData);//new Blob([imageBase64], {type: 'image/png'});
		var file = new File([blob], filename, {type: 'image/png'});
		
		file.upload = $upload.upload({
			url: "https://api.cloudinary.com/v1_1/xxxxx/upload",
			data: {
				upload_preset: "xxxxx",
				tags: 'myphotoalbum',
				context: 'photo=' + filename,
				file: file
			}
		}).progress(function (e) {
			file.progress = Math.round((e.loaded * 100.0) / e.total);
			file.status = "Uploading... " + file.progress + "%";
			$ionicLoading.show({template: waitMessage + (file.progress) + "%"});
		}).success(function (data, status, headers, config) {
            sucessCBParameters.data = data;
            sucessCallback(sucessCBParameters);
            deferred.resolve(AppModel.ad.ad);
            
        }).error(function (data, status, headers, config) {
        	file.result = data;
        	console.error('PENDING ERROR HANDLER');
        	deferred.reject(data);
        });
        return deferred.promise;
    };
}]);

当我在 android 下运行我的代码时,它可以完美运行,并且图像已上传到服务器,但在 IO 上运行时,我从 cloudinary 收到“空文件”错误。调试代码,文件似乎创建正确,我得到的唯一错误是“空文件”。

到目前为止,我无法确定真正的问题是 ngFileUpload 还是我创建图像字段的方式。

到目前为止,我已经尝试了这篇文章中描述的步骤,但没有运气。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript angularjs ionic-framework ng-file-upload


    【解决方案1】:

    对于遇到此问题的其他人,ng-file-upload 不能与cordova一起使用,这里是原始答案ng-file-upload not uploading in Ionics

    如果其他人需要代码来轻松地将图片上传到 cloudinary,这对我有用。

    ref.uploadPhoto = function(imageData, album, waitMessage, imgType){
        var deferred = $q.defer();
        var filename = Math.floor(Math.random()*90000) + 10000 + ".png";
        var options = {
            fileName: filename,
            chunkedMode: false,
            mimeType: "image/png",
            params: {'upload_preset': "XXXXX",
                    'tags': album,
                    'context': 'photo=' + filename},
    
        };
    
        $cordovaFileTransfer.upload("https://api.cloudinary.com/v1_1/XXXXX/upload",
            imageData, options)
            .then(function(result){
                var response = JSON.parse(result.response);
                response.type = imgType;
                deferred.resolve(response);
            }, function(err){
                console.error(err);
                deferred.reject(err);
            }, function(progress){
                var val = Math.round(((progress.loaded * 100.0) / progress.total));
                console.log(val);
                if(waitMessage){
                    $ionicLoading.show({template: waitMessage + val + "%"});    
                }
            }).catch(function(err){
                console.error(err);
                deferred.reject(err);  
            });
    
        return deferred.promise;
    };
    

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2023-01-27
      • 2013-12-25
      相关资源
      最近更新 更多