Titanium - 将图片发送到服务器:文件大小错误

Titanium - Send picture to server : file size bug

我想将图片从我的应用程序(iOS 和 Android)发送到我的服务器。我的代码适用于小图片,但如果尺寸太大,当我发送数据时,没有任何反应并且应用程序变慢。 你能解释一下我的代码中的问题以及如何解决吗?非常感谢:)

这是我的代码:

var attached_media = [];
var file_btn = Ti.UI.createButton({ title: L('select') });

file_btn.addEventListener('click',function(e){
    Titanium.Media.showCamera({
        success:function(e) {
            if(e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
                attached_media.push(Ti.Utils.base64encode(e.media).text);
            }
        },
        saveToPhotoGallery:true,
        allowEditing: false,
        mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO]
    });
});

var send_button = Titanium.UI.createButton({
   title: 'Send',
});

send_button.addEventListener('click',function(e){

    var req = ......
    req.send({ 'medias':JSON.stringify(attached_media), 'user_id':Ti.App.Properties.getInt('user_id')});

});

我删除了不必要的代码,因为它太长了! :)

根据提供的信息,我了解到您在上传大尺寸照片时遇到了问题,例如来自相机的照片超过 2-3MB。

目前我可以建议你的唯一解决方案是在保存之前使用此 iOS-Android 模块 Ti-ImageFactory 压缩图像或者发送到服务器。

我建议您在相机的成功回调中拍摄图像后立即压缩,如下所示:

file_btn.addEventListener('click',function(e){
    Titanium.Media.showCamera({
        success:function(e) {
            if(e.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
                Ti.API.info("Initial pic bytes = " + e.media.length);

                // if bytes length of pic is larger than 3MB or 3145728 bytes, set compression to 0.5,
                // else keep it to default which is 0.7
                var imf = require('ti.imagefactory');
                var compressedPic = (e.media.length > 3145728) ? imf.compress(0.5) : imf.compress();
                attached_media.push(Ti.Utils.base64encode(compressedPic).text);

                Ti.API.info("Compressed pic bytes = " + compressedPic.length);

                compressedPic = null;
            }
        },
        saveToPhotoGallery:true,
        allowEditing: false,
        mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO]
    });
});

已添加代码 - 如果捕获的图片大小超过 3MB,则按 0.5 级别压缩,否则使用默认级别压缩0.7。同时检查初始图片大小和压缩图片大小,以根据应用对更快上传的要求匹配更好的结果。

您还可以在 compress() 方法中传递压缩级别。有关更多信息,请参阅文档。