2012-01-08 10 views
4

こんにちは、誰かが助けてくれることを願っています。自分のAndroidアプリケーションをfininsにするために、私はクラスを終了する必要があります。ユーザーはそこにサーバー(MySql)にイメージをアップロードできます。PHPの画像ファイルをアップロードするために送られたAndroidの画像ファイルはapplication/octet-streamタイプでimage/jpegではありませんか?

画像の形式を除いて、すべての作品は、Android/Androidアプリから送信されるimage/jpegではなくapplication/octet-streamですか? ファイルアプリケーション/オクテットストリームを開き、画像/ JPEG形式に変更できますか?

アップロードのためのPHPファイル...

$fileName = $_FILES['uploaded']['name']; 

$tmpName = $_FILES['uploaded']['tmp_name']; 

$fileSize = $_FILES['uploaded']['size']; 

$fileType = $_FILES['uploaded']['type']; 


$fp  = fopen($tmpName, 'rb'); 
$content = fread($fp, $fileSize); 
$content = addslashes($content); 
そこには問題を形成していないフォームのアップロードとうまく動作

。しかし、間違った画像タイプのアンドロイドアプリからBlobファイルを空の0として保存すると、$ fileSizeは真のサイズを表示しますが、$ contentが作成されても何も表示されません。

177ローム2.jpg image/jpeg 6876 [BLOB - 6.7 KiBの] P(これは、ウェブページからのものである) 215 myImage.jpg application/octet-streamと1066 [BLOB - 0 B](携帯電話から)

のTHX人

答えて

4

application/octet-stream又はimage/jpeg HTTPクライアント(ブラウザ)がバイナリファイルデータ自体の横に追加情報として追加したMIMEタイプのみです。

したがって、MIMEタイプはここで問題にならないはずです。あなたのプログラムが失敗した場合の要求の違いが分かるだけですが、これが問題の原因であってはいけません。

あなたは基本的に間違った場所を見ています。

代わりに、エラーと条件のチェックをコードに追加する必要があります。特にの前提条件チェックではとなり、スクリプトが提供されたデータに対して適切に動作することがわかります。

あなたの質問にあなたが見せたことから、私が追加できるものは何もありません。とにかくこれが助けになるといいですね。

また、PHPマニュアルにはa section about file-uploadsが含まれています。エラーケースを処理します。

次に、データベースにデータを挿入する方法に問題があるかもしれないので、技術的に問題がファイルアップロードに全く関連していない可能性があります。

+0

まだ失われたビットを、その溶液中で立ち往生されていません。あなたの答えhakreのためのThxしかし、私はエラーチェックを追加する場合は、私は永遠に拒否される事の私のアンドロイド側に問題を作成しています。 – user1136994

+0

$ data = file_get_contents($ _ FILES ['uploaded'] ['tmp_name']); $ image = imagecreatefromstring($ data);上記のようなものを使うことを望んでいたが、失敗し続けている。 – user1136994

4

一部のアンドロイドは実際に正しいタイプの代わりにmime-type application/octet-streamを使用してアップロードします。あなたがチェックすることができます。これにより

//the uploaded file 
$img = $_FILES['img']; 

//array for type if octet 
$realMime = array(
    'useNew' => false, 
    'type' => '' 
); 

if($img['type'] == "application/octet-stream"){ 
    $imageMime = getimagesize($img['tmp_name']); // get temporary file REAL info 
    $realMime['type'] = $imageMime['mime']; //set in our array the correct mime 
    $realMime['useNew'] = true; //set to true for next if 
} 

//now check if we will use the realMime or the one sent by browser 
//$mimeCheck is the things you want to check. In my case i just wanted PNG or JPG 
if($realMime['useNew'] == true){ //if true, use realMime to check 
    $mimeCheck = ($realMime['type'] != "image/png" && $realMime['type'] != "image/jpeg" && $realMime['type'] != "image/jpg"); 
}else{ //if not using real mime, go with the one browser sent us 
    $mimeCheck = ($img['type'] != "image/png" && $img['type'] != "image/jpeg" && $img['type'] != "image/jpg"); 
} 

//returns error if image not png/jpg/jpeg 
if($mimeCheck){ 
    //return some error 
} 

:そのために

、私は次のよう作りました。もちろん、getimagesize()のエラーハンドラを作成する必要があります。なぜなら、ユーザーは実際にはイメージではないオクテットストリームファイルをアップロードできるからです。

は、詳細情報については、私はその少し遅れ知っ

0

PHP.net getimagesize() docを読んで、私は、この答えは、他の人々を助けることができると思います。

私が上でこれを見つけた:あなたはMIMEタイプをチェックしたいのであれば、あなたがfinfoない$_FILE[type]によって指定されたMIMEタイプのために行く必要がありますhttp://php.net/manual/en/features.file-upload.php

// DO NOT TRUST $_FILES['upfile']['mime'] VALUE !! 
// Check MIME Type by yourself. 
$finfo = new finfo(FILEINFO_MIME_TYPE); 
if (false === $ext = array_search(
    $finfo->file($_FILES['upfile']['tmp_name']), 
    array(
     'jpg' => 'image/jpeg', 
     'png' => 'image/png', 
     'gif' => 'image/gif', 
    ), 
    true 
)) { 
    throw new RuntimeException('Invalid file format.'); 
} 

。それは間違っているかもしれませんので、あなた自身のMIMEタイプを推測してください。特にこの場合のようなデバイスが異なる場合はアンドロイド。私たちはこのようなWebサービスの呼び出しにする必要があり、適切な呼び出しを行うためにAndroidの側で

1

try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost postRequest = new HttpPost("https://someserver.com/api/path/"); 
     postRequest.addHeader("Authorization",authHeader); 
     //don't set the content type here    
     //postRequest.addHeader("Content-Type","multipart/form-data"); 
     MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 


     File file = new File(filePath); 
     FileInputStream fileInputStream = new FileInputStream(file); 
     reqEntity.addPart("parm-name", new InputStreamBody(fileInputStream,"image/jpeg","file_name.jpg")); 

     postRequest.setEntity(reqEntity); 
     HttpResponse response = httpclient.execute(postRequest); 

     }catch(Exception e) { 
      Log.e("URISyntaxException", e.toString()); 
     } 
関連する問題