2015-02-12 87 views
1

如何檢測圖片是否已完全上傳或部分上傳?我遇到了一個奇怪的情況,只上傳了一半圖片。下面的圖像通過一個Web服務,通​​過Android應用程序上傳用戶:PHP圖片上傳中間失敗。上傳了一半圖片

enter image description here

管理門戶和Web服務使用Yii框架編寫的。什麼可能導致像這樣創建圖像? Android開發者發送base-64編碼串和我對其進行解碼的方式如下:

$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))) 

我懷疑這是原因,因爲Android開發者正在發送的基64編碼之前文件被完全上傳。或者是別的什麼?

$ profilePicture等於64鹼基串這樣,

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 

的Android端代碼如下,

String imageString = Base64.encodeBytes(byteImage); 

這是所使用的類文件。

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

+1

調查uploade的大小和原始圖像 – KOTIOS 2015-02-12 04:00:14

+1

通過文件大小/ md5 checksum驗證可能嗎? – Raptor 2015-02-12 04:02:19

+0

什麼是md5校驗?你能告訴可能造成這種情況嗎? – dev1234 2015-02-12 04:10:21

回答

2

可以使用imagecreatefrompng函數來檢查提供的圖像是否損壞。

$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'; 
1
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; 

    } 

這種方法可以幫助你的位圖圖像轉換爲Base64編碼字符串。