1

我在这里得到了一个将文件上传到 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 
 } 
           }

所以基本上我希望应用程序显示一个意图,它将显示一个文件选择器,让应用程序用户选择从他们的手机上传的文件。请帮我做这个!!

4

2 回答 2

0

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

这里github链接

于 2013-09-22T06:26:50.890 回答
0

您可以使用Intent.ACTION_GET_CONTENT带有 Intent 的 Action 来显示设备上所有可用于 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);

要获取选定的文件路径,您需要覆盖onActivityResultActivity 的方法

于 2013-09-22T05:35:24.250 回答