7

Androidで画像をアップロードしています。現在、私のコードはファイルのみをアップロードしていますが、いくつかのパラメーターも送信したいと考えています。私はフォローしようとしています

FileInputStream fileInputStream = new FileInputStream(sourceFile);
        URL url = new URL(upLoadServerUri);
        conn = (HttpURLConnection) url.openConnection(); // Open a HTTP  connection to  the URL
        conn.setDoInput(true); // Allow Inputs
        conn.setDoOutput(true); // Allow Outputs
        conn.setUseCaches(false); // Don't use a Cached Copy
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("ENCTYPE", "multipart/form-data");
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
        conn.setRequestProperty("uploaded_file", fileName);
        dos = new DataOutputStream(conn.getOutputStream());

        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd);
        dos.writeBytes(lineEnd);

        //Sending data
        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd);
        dos.writeBytes(lineEnd);
        dos.writeBytes(globalUID);

サーバー側ではphpを使用しています。これが私がそのパラメータを取得しようとしている方法です

$param = $_POST["paramName"];
target_path1 = "./places_photos/" . $param;

しかし、私の現在のコードはファイルをアップロードしますが、パラメーターを送信しません。パラメータを送信するにはどうすればよいですか? また、サーバー側でパラメータを取得するにはどうすればよいですか?

アップデート

現在、画像は変数places_photosに記載されているディレクトリに保存されています。$target_path1私が望むのは、その画像をユーザーのディレクトリに保存し、そのディレクトリにユーザーIDという名前を付けることです。残念ながら、サーバー側でユーザーIDを取得していません。ファイルと一緒にユーザー ID をサーバーに送信するにはどうすればよいですか?

4

5 に答える 5

0

あなたのコードは少し混乱しています。変数を再確認してください...たとえばtarget_path1、前に $ がない場合は、他のサーバー変数のいずれかが有効な出力を返すかどうかを確認してください。

ただし、すべて失敗した場合は、アップロードされているファイルの名前を変更できます。ファイル名にパラメーターを含め、パラメーターを抽出した後、サーバー側で再度名前を変更します。

于 2012-06-24T08:56:23.210 に答える
0

PHP にファイル名を認識させたいですか?? 答えが「はい」の場合は、コードにいくつかの変更を加えることができます。

(最大サイズのバッファを作成し、ファイルを読み取ってフォームに書き込むと仮定します)

最初の変更では、paramName を送信するためにこれは必要ありません:

//Sending data
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(globalUID);

これを行うだけです:

dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

そしてあなたのphpで、あなたのコードを変更してください:

$param = $_POST["paramName"];

$param = basename( $_FILES['uploaded_file']['name']);

この記事を確認できます

于 2012-06-22T21:04:12.313 に答える
0

この後に別の lineEnd を追加する必要があります。

dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd);
    dos.writeBytes(lineEnd);
    dos.writeBytes(globalUID);
    dos.writeBytes(lineEnd); <-- add this

また、マルチパート境界の末尾 (「--」で始まる行) を必ず追加してください。この場合は、次のように追加します。

dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
于 2012-06-22T20:25:39.793 に答える
0

ユーザー ID を含む Cookie を設定します。サーバーでは、Cookie を取得してユーザー ID を確認できます。(ただし、これは安全ではなく、ユーザー ID パラメーターを渡すこともないことに注意してください)

于 2012-06-23T04:44:13.913 に答える