gpt4 book ai didi

javascript - safari 上的 ngFileUpload 发布空文件

转载 作者:太空宇宙 更新时间:2023-11-04 16:27:11 25 4
gpt4 key购买 nike

我使用 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 还是我创建图像字段的方式。

到目前为止,我已经尝试过这篇文章中描述的步骤查看 poss Convert base64 data url to image file in angularjs Convert base64 data image file in angularjshttp://ourcodeworld.com/articles/read/150/how-to-create-an-image-file-from-a-base64-string-on-the-device-with-cordova运气不好。

如有任何帮助,我们将不胜感激。

最佳答案

对于遇到此问题的其他人,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;
};

关于javascript - safari 上的 ngFileUpload 发布空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com