2

さらに処理するためにSDカードからPHPサーバーにファイルをアップロードする必要があるアプリケーションを作成していますが、logcatをアップロードしようとすると、次のエラーが表示されます:java.net.ConnectException:/10.0.2.2(ポート8080)への接続に失敗しました:接続に失敗しました:ETIMEDOUT(接続がタイムアウトしました)。私のJavaコードは以下の通りです。

package de.smsbackup;

import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.util.Log;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import de.smsbackup.SMSList;

@SuppressWarnings("unused")
public class Uploader extends Activity {

private String Tag = "UPLOADER";
private String urlString = "http://10.0.2.2:8080/admin/admin/uploadtest.php";
HttpURLConnection conn;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.upload_sms_file);

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
    .detectDiskReads()  
    .detectDiskWrites()  
    .detectNetwork()   // or .detectAll() for all detectable problems  
    .penaltyLog()  
    .build());  
   StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
    .detectLeakedSqlLiteObjects()  
    .detectLeakedClosableObjects()  
    .penaltyLog()  
    .penaltyDeath()  
    .build()); 
    String exsistingFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/SMSBackup.txt";

    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    try {
        // ------------------ CLIENT REQUEST

        Log.e(Tag, "Inside second Method");

        FileInputStream fileInputStream = new FileInputStream(new File(
                exsistingFileName));

        // open a URL connection to the Servlet

        URL url = new URL(urlString);

        // Open a HTTP connection to the URL

        conn = (HttpURLConnection) url.openConnection();

        // Allow Inputs
        conn.setDoInput(true);

        // Allow Outputs
        conn.setDoOutput(true);

        // Don't use a cached copy.
        conn.setUseCaches(false);

        // Use a post method.
        conn.setRequestMethod("POST");

        conn.setRequestProperty("Connection", "Keep-Alive");

        conn.setRequestProperty("Content-Type",
                "multipart/form-data;boundary=" + boundary);

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

        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: post-data; name=uploadedfile;filename="
                        + exsistingFileName + "" + lineEnd);
        dos.writeBytes(lineEnd);

        Log.e(Tag, "Headers are written");

        // create a buffer of maximum size

        int bytesAvailable = fileInputStream.available();
        int maxBufferSize = 1000;
        // int bufferSize = Math.min(bytesAvailable, maxBufferSize);
        byte[] buffer = new byte[bytesAvailable];

        // read file and write it into form...

        int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);

        while (bytesRead > 0) {
            dos.write(buffer, 0, bytesAvailable);
            bytesAvailable = fileInputStream.available();
            bytesAvailable = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
        }

        // send multipart form data necesssary after file data...

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

        // close streams
        Log.e(Tag, "File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();

    } catch (MalformedURLException ex) {
        Log.e(Tag, "error: " + ex.getMessage(), ex);
    }

    catch (IOException ioe) {
        Log.e(Tag, "error: " + ioe.getMessage(), ioe);
    }


    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn
                .getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            Log.e("Dialoge Box", "Message: " + line);
        }
        rd.close();

    } catch (IOException ioex) {
        Log.e("Note Pad", "error: " + ioex.getMessage(), ioex);
    }
}
}

私のPHPファイルは次のとおりです。

<?php
// Where the file is going to be placed 
 $target_path = "admin/";

 /* Add the original filename to our target path.  
  Result is "uploads/filename.extension" */
 $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";
  chmod ("uploads/".basename( $_FILES['uploadedfile']['name']), 0644);
} else{
 echo "There was an error uploading the file, please try again!";
 echo "filename: " .  basename( $_FILES['uploadedfile']['name']);
 echo "target_path: " .$target_path;
}
?>

誰かが私にどこが間違っているかをできるだけ早く教えてもらえますか?ありがとう。

4

1 に答える 1

0

IPを扱っているからこそ、それが起こっていると思います。ドメイン名を使用してみてください。

于 2018-05-25T03:46:32.843 に答える