2013-09-22 5 views
1

У меня есть код, который загружает файл на php-сервер, я установил путь загрузки файлов и загрузил имя файла в код, чтобы он автоматически выбирал, какой файл из моего телефона загружать, здесь это:Как создать FileUploader для Android

public class UploadToServer extends Activity { 

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

String upLoadServerUri = null; 

/********** File Path *************/ 
final String uploadFilePath = "/mnt/sdcard/"; 
final String uploadFileName = "Verdict.jpg"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

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

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

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

/************* Php script path ****************/ 
upLoadServerUri = "http://animobile.info/animobile/UploadToServer.php"; 

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" 
             +" http://smough.x10host.com/animobile/upload/" 
             +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; 

    } // End else block 
} 
      } 

Поэтому в основном я хочу, чтобы приложение, чтобы показать намерение, которое будет отображаться в окне выбора файлов, который позволит пользователям приложения выбрать файл для загрузки со своего мобильного телефона. Пожалуйста, помогите мне сделать это !!

ответ

0

вы можете использовать Intent.ACTION_GET_CONTENT Action с Intent для показа всех приложений доступны на устройстве для просмотра SD-CARD, как:

String str_path=Environment.getExternalStorageDirectory().getPath().toString(); 
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
Uri uri_folder = Uri.parse(str_path); 
intent.setDataAndType(uri_folder, "text/*"); 
startActivityForResult(Intent.createChooser(intent, "Select File"),0); 

для получения выбранного пути файла, который нужно будет переопределить onActivityResult метод деятельности

0

Если вы не возражаете против использования сторонних библиотек, здесь очень хорошо. Я использовал его, и это довольно круто.

Здесь github link

Смежные вопросы