dev1234
dev1234

Reputation: 5716

PHP Image upload failed in middle. Half image uploaded

How can I detect if an image has been uploaded completely or partially? I encountered a strange situation where only half an image has been uploaded. The following image was uploaded by a user through an Android application via a Web service:

enter image description here

The admin portal and Web service is written using the Yii framework. What might have caused an image to be created like this? Android Developer sends the base-64 encoded string and I decode it the following way:

$profilePicture = $data['profilePicture'];
    header('Content-Type: image/png');
    $rnd = sprintf('%04d', rand(0, 9999));
    $fileName = $rnd . '_' . time() . '.png'; // random number + timestamp

    $uploadPath = User::getProfilePicturePath() . $id;

    if (!file_exists($uploadPath) and ! is_dir($uploadPath)) //create a directory only if it does not exist.
        mkdir($uploadPath);

    if (!file_put_contents($uploadPath . DIRECTORY_SEPARATOR . $fileName, base64_decode($profilePicture)))

I doubt this is the cause, because Android Developer is sending the base-64 encode before file is completely uploaded. Or is it something else?

$profilePicture is equal to 64 base string like this,

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

Android side code is as below,

String imageString = Base64.encodeBytes(byteImage);

This is the class file used.

http://www.mirthcorp.com/community/issues/secure/attachment/10313/Base64.java

Upvotes: 1

Views: 695

Answers (2)

dev1234
dev1234

Reputation: 5716

Can use imagecreatefrompng function to check if provided image is broken or not.

$src1 = 'F:\Test\0374_1423730003.png';
$src2 = 'F:\Test\5030_1423722865.png'; // broken

$im = @imagecreatefrompng($src1);
if ($im)
    echo 'created img';
else
    echo 'not created, broken image';

Upvotes: 2

Sajith Vijesekara
Sajith Vijesekara

Reputation: 1372

public String BitMapToString(Bitmap bitmap){

        ByteArrayOutputStream baos=new  ByteArrayOutputStream();

        bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);

        byte [] b=baos.toByteArray();

        String temp=null;

        try{

            System.gc();

            temp= Base64.encodeToString(b, Base64.DEFAULT);

        }catch(Exception e){

            e.printStackTrace();

        }catch(OutOfMemoryError e){

            baos=new  ByteArrayOutputStream();

            bitmap.compress(Bitmap.CompressFormat.JPEG,50, baos);
            b=baos.toByteArray();

            temp=Base64.encodeToString(b, Base64.DEFAULT);

            Log.e("EWN", "Out of memory error catched");

        }

        return temp;

    }

This method helps you to convert Bitmap image to Base64 encode string.

Upvotes: 1

Related Questions