2011-08-03 6 views
0

POSTデータを使用してサーバー上の.pngファイルにデータを保存する.phpスクリプトに送信するローカルの.pngファイルがあります。これはどうすればいいですか?エンコードする必要がありますか?私が持っているのは、FileとPOSTデータへの方法です。ここでjavaアプリケーションを使用してサーバー上の.phpファイルにローカル.pngを送信する方法

は、私は.PNGを送信しています方法です:

public static byte[] imageToByte(File file) throws FileNotFoundException { 
    FileInputStream fis = new FileInputStream(file); 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    byte[] buf = new byte[1024]; 
    try { 
     for (int readNum; (readNum = fis.read(buf)) != -1;) { 
      bos.write(buf, 0, readNum); 
     } 
    } catch (IOException ex) { 
    } 
    byte[] bytes = bos.toByteArray(); 
    return bytes; 
} 

public static void sendPostData(String url, HashMap<String, String> data) 
     throws Exception { 
    URL siteUrl = new URL(url); 
    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection(); 
    conn.setRequestMethod("POST"); 
    conn.setDoOutput(true); 
    conn.setDoInput(true); 

    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 

    Set keys = data.keySet(); 
    Iterator keyIter = keys.iterator(); 
    String content = ""; 
    for (int i = 0; keyIter.hasNext(); i++) { 
     Object key = keyIter.next(); 
     if (i != 0) { 
      content += "&"; 
     } 
     content += key + "=" + URLEncoder.encode(data.get(key), "UTF-8"); 
    } 
    System.out.println(content); 
    out.writeBytes(content); 
    out.flush(); 
    out.close(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(
      conn.getInputStream())); 
    String line = ""; 
    while ((line = in.readLine()) != null) { 
     System.out.println(line); 
    } 
    in.close(); 
} 

PHPスクリプト:

<? 
// Config 
$uploadBase = "../screenshots/"; 
$uploadFilename = $_GET['user'] . ".png"; 
$uploadPath = $uploadBase . $uploadFilename; 

// Upload directory 
if(!is_dir($uploadBase)) 
mkdir($uploadBase); 

// Grab the data 
$incomingData = $_POST['img']; 

// Valid data? 
if(!$incomingData || !isset($_POST['img'])) 
die("No input data"); 

// Write to disk 
$fh = fopen($uploadPath, 'w') or die("Error opening file"); 
fwrite($fh, $incomingData) or die("Error writing to file"); 
fclose($fh) or die("Error closing file"); 

echo "Success"; 
?> 
+0

アップロードしようとすると、画像が壊れています。メモ帳で.pngを開くと、NULの – Sam

+0

の代わりに '\ 0'がある以外は、すべてがローカルファイルと同じであることがわかります。コードを表示します。単純な投稿やフォームエンコードされた投稿をしていますか? –

+0

メインの投稿を編集しました。 – Sam

答えて

0

マイ最小限のコードが動作します。しかし

​​

に方法を設定しますPUT。

+0

最後の行は何をしますか?そして、私は問題がJavaまたはPHPのエンコーディング/デコードのためだと思う:http://stackoverflow.com/questions/6932058/java-png-upload-to-php – Sam

+0

最後の行は、ファイルをPHPスクリプトに送信します。あなたJava **と** PHPコードは確実に*壊れています*。 –

0

私はあなたがほぼ正しいファイルを取得したことに驚いています。実際には、ブラウザを使用してファイルを送信すると、フォームタグのエンコーディングはenctype="multipart/form-data"となります。どのように動作するのかわかりません(http://tools.ietf.org/html/rfc2388で定義されています)が、ファイルのエンコードが含まれています(Base64など)。とにかく、あなたがそのようなhttpクライアントライブラリを使用すると、内部について忘れることがありますApache HttpComponents

関連する問題