如何为Android创建FileUploader


How to create FileUploader for Android

我在这里得到了一个将文件上传到php服务器的代码,我已经在代码中设置了一个上传文件路径和上传文件名,因此它会自动从我的手机中选择要上传的文件,这里是:

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 
 } 
           }
所以基本上我希望应用程序显示一个意图,该

意图将显示一个文件选择器,让应用程序用户选择要从手机上传的文件。请帮我做这件事!!

您可以使用Intent.ACTION_GET_CONTENT操作意图来显示设备上可用于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活动方法

如果您不介意使用第三方库,这里有一个非常好的库。我用过它,它很酷。

这里 github 链接