2013-01-16 121 views
2

我正在开发一个应用程序,其中我以字符串格式向服务器发送数据。以下是我的代码。它工作正常。但现在我的问题是如何将整个.txt文件和.doc文件发送到服务器。在我的GUI中,我必须提供用户选择的路径。意味着用户必须选择他/她想要发送文件的路径......请帮我解决我的问题...谢谢...发送.txt文件,将文档文件发送到服务器android

activity_main.xml中文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="170sp" 
     android:layout_height="40sp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="16dp" 
     android:ems="10" 
     android:hint="@string/ip" /> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="100sp" 
     android:layout_height="40sp" 
     android:layout_alignBaseline="@+id/editText1" 
     android:layout_alignBottom="@+id/editText1" 
     android:layout_marginLeft="24dp" 
     android:layout_toRightOf="@+id/editText1" 
     android:ems="10" 
     android:hint="@string/port" 
     android:inputType="number" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/editText3" 
     android:layout_width="300sp" 
     android:layout_height="200sp" 
     android:layout_below="@+id/editText1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="38dp" 
     android:ems="10" 
     android:hint="@string/msg" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="64dp" 
     android:text="@string/send" /> 

</RelativeLayout> 

。 Java文件

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    private Socket client; 
    private PrintWriter printwriter; 
    private EditText etMsg, etIP, etPort; 
    private Button button; 
    private String messsage; 
    int port = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     etIP = (EditText) findViewById(R.id.editText1); 
     etPort = (EditText) findViewById(R.id.editText2); 
     etMsg = (EditText) findViewById(R.id.editText3); 
     button = (Button) findViewById(R.id.button1); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       messsage = etMsg.getText().toString(); 
       etMsg.setText(""); 
       port = Integer.parseInt(etPort.getText().toString()); 

       new Thread(new Runnable() 
       { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         try 
         { 
          client = new Socket(etIP.getText().toString(), port); 
          printwriter = new PrintWriter(client.getOutputStream(),true); 
          printwriter.write(messsage); 
          printwriter.flush(); 
          printwriter.close(); 
          client.close(); 
         } 

         catch (UnknownHostException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         }  
        } 
       }).start(); 


      } 
     }); 
    } 

} 

<uses-permission android:name="android.permission.INTERNET" /> 
+0

使用这个链接http://reecon.wordpress.com/2010/04/25/uploading-files-to-http-server-using-post-android-sdk/ –

+0

@DixitPatel:谢谢...让我执行它... –

回答

1

该代码上传数据(图片,MP3的,文本文件等)到HTTP服务器

HttpURLConnection connection = null; 
DataOutputStream outputStream = null; 
DataInputStream inputStream = null; 

String pathToOurFile = "/data/file_to_send.mp3"; 
String urlServer = "http://192.168.1.1/handle_upload.php"; 
String lineEnd = "\r\n"; 
String twoHyphens = "--"; 
String boundary = "*****"; 

int bytesRead, bytesAvailable, bufferSize; 
byte[] buffer; 
int maxBufferSize = 1*1024*1024; 

try 
{ 
FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile)); 

URL url = new URL(urlServer); 
connection = (HttpURLConnection) url.openConnection(); 

// Allow Inputs & Outputs 
connection.setDoInput(true); 
connection.setDoOutput(true); 
connection.setUseCaches(false); 

// Enable POST method 
connection.setRequestMethod("POST"); 

connection.setRequestProperty("Connection", "Keep-Alive"); 
connection.setRequestProperty("Content-Type", "multipart/formdata;boundary="+boundary); 

outputStream = new DataOutputStream(connection.getOutputStream()); 
outputStream.writeBytes(twoHyphens + boundary + lineEnd); 
outputStream.writeBytes("Content-Disposition: form-data; 
name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd); 
outputStream.writeBytes(lineEnd); 

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

// Read file 
bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

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

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

// Responses from the server (code and message) 
serverResponseCode = connection.getResponseCode(); 
serverResponseMessage = connection.getResponseMessage(); 

fileInputStream.close(); 
outputStream.flush(); 
outputStream.close(); 
} 
catch (Exception ex) 
{ 
//Exception handling 
    } 
+0

@Gaurav ...我如何设置IP和我必须发送文件的服务器的端口号...? –

+0

@ Anil Bhatiya在最初的行我给了字符串IP地址 – GOLDEE

+0

@Gaurav ...雅这是好的。但没有端口号码,它会工作吗?是否有必要在http后面写入IP ...? –

1

试试这个代码来创建txt文件写入字符串到文件并将其发送到服务器...

File f = new File(Environment.getExternalStorageDirectory(),"new"); 
     if(!f.exists()) 
     { 
      f.mkdir(); 
     } 
     File file = new File("new.txt"); 
     FileWriter w = new FileWriter("/sdcard/new/new.txt"); 
     BufferedWriter out = new BufferedWriter(w); 
     out.write(data); 
     out.flush(); 
     out.close(); 
          String file_name = "/sdcard/new/new.txt"; 

     File file1 = new File(file_name); 
     socket = new Socket("117.218.28.70", 2020); 

     ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
     ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 

     oos.writeObject(file1.getName()); 

     FileInputStream fis = new FileInputStream(file1); 
     byte [] buffer = new byte[450000]; 
     Integer bytesRead = 0; 

     while ((bytesRead = fis.read(buffer)) > 0) 
     { 
      oos.writeObject(bytesRead); 
      oos.writeObject(Arrays.copyOf(buffer, buffer.length)); 
     } 
     oos.close(); 
     ois.close(); 
     System.exit(0); 
+0

@Yograj ...它不工作... –

6

试试这个代码。这是完美的工作对我来说..

public class ServerActivity extends Activity { 

    TextView messageText; 
    Button uploadButton; 
    int serverResponseCode = 0; 
    ProgressDialog dialog = null; 

    String upLoadServerUri = null; 

    final String uploadFilePath = "mypath"; 
    final String uploadFileName = "myfile"; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_server); 

     uploadButton = (Button)findViewById(R.id.uploadButton); 
     messageText = (TextView)findViewById(R.id.messageText); 

     messageText.setText("Uploading file path :- 'path"+uploadFileName+"'"); 


     upLoadServerUri = "serverpath"; 

     uploadButton.setOnClickListener(new OnClickListener() 
     {    
      @Override 
      public void onClick(View v) 
      { 

       dialog = ProgressDialog.show(UploadToServer.this, "", "Uploading file...", true); 

       new Thread(new Runnable() 
       { 
         public void run() 
         { 
          runOnUiThread(new Runnable() 
          { 
            public void run() 
            { 
             messageText.setText("uploading started....."); 
            } 
           });      

          uploadFile(uploadFilePath + "" + uploadFileName); 

         } 
         }).start();   
       } 
      }); 
    } 

    public int uploadFile(String sourceFileUri) 
    { 


      String fileName = sourceFileUri; 

      HttpURLConnection conn = null; 
      DataOutputStream dos = null; 
      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "*****"; 
      int bytesRead, bytesAvailable, bufferSize; 
      byte[] buffer; 
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

      if (!sourceFile.isFile()) 
      { 

       dialog.dismiss(); 

       Log.e("uploadFile", "Source File not exist :" 
            +uploadFilePath + "" + uploadFileName); 

       runOnUiThread(new Runnable() 
       { 
        public void run() 
        { 
         messageText.setText("Source File not exist :" +uploadFilePath + "" + uploadFileName); 
        } 
       }); 

       return 0; 

      } 
      else 
      { 
       try 
       { 

        // open a URL connection to the Servlet 
        FileInputStream fileInputStream = new FileInputStream(sourceFile); 
        URL url = new URL(upLoadServerUri); 

        // Open a HTTP connection to the URL 
        conn = (HttpURLConnection) url.openConnection(); 
        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); 

        // create a buffer of maximum size 
        bytesAvailable = fileInputStream.available(); 

        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        buffer = new byte[bufferSize]; 

        // read file and write it into form... 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        while (bytesRead > 0) 
        { 

        dos.write(buffer, 0, bufferSize); 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        } 

        // send multipart form data necesssary after file data... 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // Responses from the server (code and message) 
        serverResponseCode = conn.getResponseCode(); 
        String serverResponseMessage = conn.getResponseMessage(); 

        Log.i("uploadFile", "HTTP Response is : " 
          + serverResponseMessage + ": " + serverResponseCode); 

        if(serverResponseCode == 200) 
        { 

         runOnUiThread(new Runnable() 
         { 
          public void run() 
          { 

           String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"+" serverpath" 
               +uploadFileName; 

           messageText.setText(msg); 
           Toast.makeText(UploadToServer.this, "File Upload Complete.", 
              Toast.LENGTH_SHORT).show(); 
          } 
         });     
        }  

        //close the streams // 
        fileInputStream.close(); 
        dos.flush(); 
        dos.close(); 

       } 
       catch (MalformedURLException ex) 
       { 

        dialog.dismiss(); 
        ex.printStackTrace(); 

        runOnUiThread(new Runnable() 
        { 
         public void run() 
         { 
          messageText.setText("MalformedURLException Exception : check script url."); 
          Toast.makeText(UploadToServer.this, "MalformedURLException", Toast.LENGTH_SHORT).show(); 
         } 
        }); 

        Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
       } 
       catch (Exception e) 
       { 

        dialog.dismiss(); 
        e.printStackTrace(); 

        runOnUiThread(new Runnable() 
        { 
         public void run() 
         { 
          messageText.setText("Got Exception : see logcat "); 
          Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
            Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        Log.e("Upload file to server Exception", "Exception : " 
                + e.getMessage(), e); 
       } 
       dialog.dismiss();  
       return serverResponseCode; 

      } 
     } 
    } 

希望这将帮助ü :-)

+0

这是2015年,这正是我正在寻找。荣誉给你Android乐手! – Stunna

+0

thanx很多。你保存了我的日子 –

+1

我应该在我的服务器文件上写什么? – driftking9987

2
HttpURLConnection connection = null; 
DataOutputStream outputStream = null; 
DataInputStream inputStream = null; 
String pathToOurFile = "/data/file_to_send.mp3"; 
String urlServer = "http://192.168.1.1/handle_upload.php"; 
String lineEnd = "\r\n"; 
String twoHyphens = "--"; 
String boundary = "*****"; 

int bytesRead, bytesAvailable, bufferSize; 
byte[] buffer; 
int maxBufferSize = 1*1024*1024; 

try 
{ 
    FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile)); 

    URL url = new URL(urlServer); 
    connection = (HttpURLConnection) url.openConnection(); 

    // Allow Inputs &amp; Outputs. 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 
    connection.setUseCaches(false); 

    // Set HTTP method to POST. 
    connection.setRequestMethod("POST"); 

    connection.setRequestProperty("Connection", "Keep-Alive"); 
    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); 

    outputStream = new DataOutputStream(connection.getOutputStream()); 
    outputStream.writeBytes(twoHyphens + boundary + lineEnd); 
    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd); 
    outputStream.writeBytes(lineEnd); 

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

    // Read file 
    bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

    while (bytesRead &gt; 0) 
    { 
     outputStream.write(buffer, 0, bufferSize); 
     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
    } 

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

    // Responses from the server (code and message) 
    serverResponseCode = connection.getResponseCode(); 
    serverResponseMessage = connection.getResponseMessage(); 

    fileInputStream.close(); 
    outputStream.flush(); 
    outputStream.close(); 
} 
catch (Exception ex) 
{ 
    //Exception handling 
}