0

私はphpにローカルホストを使用しています。

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.util.Log;

public class ImageUpload {
    HttpURLConnection _httpurlconnection;
    DataOutputStream _dos;
    DataInputStream _dis;
    String _serverurl="http://192.168.1.11/project/imageupload.php";
    String _lineend= "\r\n";
    String _twohyphens= "--";
    String _boundry="*****";
    int _bytesread, _bytesavailable, _buffersize;
    byte[] _buffer;
    int _maxbuffersize = 1 * 1024 * 1024;

    public void uploadImage(String _filepath) {
        try {
            FileInputStream _fis = new FileInputStream(new File(_filepath));
            URL _url = new URL(_serverurl);
            _httpurlconnection = (HttpURLConnection) _url.openConnection();
            _httpurlconnection.setDoInput(true);
            _httpurlconnection.setDoOutput(true);
            _httpurlconnection.setUseCaches(false);
            _httpurlconnection.setRequestMethod("POST");
            _httpurlconnection.setRequestProperty("Connection", "Keep-Alive");
            _httpurlconnection.setRequestProperty("Connection-Type",
                    "multipart/form-data;boundry=" + _boundry);
            _dos = new DataOutputStream(_httpurlconnection.getOutputStream());
            _dos.writeBytes(_twohyphens + _boundry + _lineend);
            _dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                + _filepath + "\"" + _lineend);

            _dos.writeBytes(_lineend);

            _bytesavailable = _fis.available();
            _buffersize = Math.min(_bytesavailable, _maxbuffersize);
            _buffer = new byte[_buffersize];
            _bytesread = _fis.read(_buffer, 0, _buffersize);


            while (_bytesread > 0) {


                _dos.write(_buffer, 0, _buffersize);
                _bytesavailable = _fis.available();
                _buffersize = Math.min(_bytesavailable, _maxbuffersize);
                _bytesread = _fis.read(_buffer, 0, _buffersize);

            }
            _dos.writeBytes(_lineend);
            _dos.writeBytes(_twohyphens + _boundry + _twohyphens + _lineend);

            int responsecode = _httpurlconnection.getResponseCode();
            String responsemessage = _httpurlconnection.getResponseMessage();
            _fis.close();
            _dos.flush();
            _dos.close();

            BufferedReader br=new BufferedReader(new InputStreamReader(_httpurlconnection.getInputStream()));
            String line;
            while((line=br.readLine())!=null)
            {
                Log.i("----------------",">>"+line);
            }
            br.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

これが私のphpコードです。

<?php

$target_path  = "/var/www/project";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
 echo "The file ".  basename( $_FILES['uploadedfile']['name']).
 " has been uploaded";
} else{
 echo "There was an error uploading the file, please try again!";
}
?>

しかし、私は通知を受け取っています:未定義のインデックス:5行目のuploadedfile誰かがこの問題を解決するのを手伝ってくれますか?

4

2 に答える 2

1

サーバーに指定している_filepathフォルダーがサーバーに存在しないようです。

于 2012-06-28T15:45:45.647 に答える
1

未定義のインデックス警告は、何らかの理由でファイルuploadedfileが要求に存在しないことを示しています。

この問題には、最初は php.ini ファイルの構成ディレクティブに関連する一般的な警告がいくつかあります。

  1. アップロード サイズの上限は十分に高く設定されていますか? これらはディレクティブmax_post_sizeupload_max_filesizeディレクティブにあります。
  2. アップロードのタイムアウトは、大きなファイルに対して十分な長さですか?max_execution_time
  3. アップロードされた一時ファイルのパスは正しく構成され、書き込み可能ですか?

それらを絞り込むと、通常、問題はクライアント コードにあります。それは単に html/js でありenctype、Web ブラウザーのフォームで忘れられていたり、モバイル デバイスのネイティブ コードであったりします。

multipartタイプリクエストでは扱いにくいため、リクエストオブジェクトの作成に役立つAndroidライブラリを調べることをお勧めします。org.apacheあなたが試みているように、リクエストの実際のテキストを書く必要のないライブラリでこれを行う方法があります。

http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/

于 2012-06-28T15:48:02.947 に答える