Android:App不在apache服务器上传视频

时间:2015-03-31 13:04:31

标签: php android permissions windows-8.1

我有一个Android应用程序,用户可以在其中拍摄视频,然后单击按钮将视频上传到位于localhost中的名为“Uploads”的文件夹。当我在模拟器上运行应用程序时,一切都按照预期的方式工作。但是当我在一个实际的Android设备上运行时,视频没有上传到我的“上传”文件夹,我得到一个“无法移动文件!”响应。

以下是我用来移动文件的PHP脚本:

<?php

// Path to move uploaded files
$target_path = "Uploads/";

// array for final json respone
$response = array();

// getting server ip address
$server_ip = gethostbyname(gethostname());

// final file url that is being uploaded
$file_upload_url = 'http://' . $server_ip . '/' . 'UploadedVideos' . '/' . $target_path;
chmod($_SERVER['DOCUMENT_ROOT'] . '/' . 'UploadedVideos' . '/' . 'Uploads', 0777);

if (isset($_FILES['video']['name'])) {
    $target_path = $target_path . basename($_FILES['video']['name']

    try {
 // Throws exception incase file is not being moved

  if (!move_uploaded_file($_FILES['video']['tmp_name'], $target_path)) {
   // make error flag true
   $response['error'] = true;
   $response['message'] = 'Could not move the file!';
  } else {

    // File successfully uploaded
    $response['message'] = 'File uploaded successfully!';
    $response['error'] = false;

    $response['file_path'] = $file_upload_url . basename($_FILES['video']['name']);
  }
 } catch (Exception $e) {
   // Exception occurred. Make error flag true
   $response['error'] = true;
   $response['message'] = $e->getMessage();
 }
} else {
 // File parameter is missing
 $response['error'] = true;
 $response['message'] = 'Not received any file!F';
}

// Echo final json response to client
echo json_encode($response);
?>

我认为这与Windows 8.1上的“上传”文件夹写权限有关,所以我问你:如何从文件夹中获取写入权限才能从Android设备访问?

编辑:UploadActivity.java

public class UploadActivity extends Activity {
    // LogCat tag
    private static final String TAG = MainActivity.class.getSimpleName();

    private ProgressBar progressBar;
    private String filePath = null;
    public String serverPath;
    private TextView txtPercentage;
    SQLiteDatabase db;
    private VideoView vidPreview;
    private Button btnUpload;
    long totalSize = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload);
        txtPercentage = (TextView) findViewById(R.id.txtPercentage);
        btnUpload = (Button) findViewById(R.id.btnUpload);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        vidPreview = (VideoView) findViewById(R.id.videoPreview);
        // Receiving the data from previous activity
        Intent i = getIntent();

        // image or video path that is captured in previous activity
        filePath = i.getStringExtra("filePath");
        serverPath = i.getStringExtra("serverPath");


        if (filePath != null) {
            // Displaying video on the screen
            previewMedia();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
        }

        btnUpload.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // uploading the file to server
                new UploadFileToServer().execute();
            }
        });

    }

    /**
     * Displaying captured image/video on the screen
     * */
    private void previewMedia() {


            vidPreview.setVisibility(View.VISIBLE);
            vidPreview.setVideoPath(filePath);
            // start playing
            vidPreview.start();

    }

    /**
     * Uploading the file to server
     * */
    public class UploadFileToServer extends AsyncTask<Void, Integer, String> {
        @Override
        protected void onPreExecute() {
            // setting progress bar to zero
            progressBar.setProgress(0);
            super.onPreExecute();
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
            // Making progress bar visible
            progressBar.setVisibility(View.VISIBLE);

            // updating progress bar value
            progressBar.setProgress(progress[0]);

            // updating percentage value
            txtPercentage.setText(String.valueOf(progress[0]) + "%");
        }

        @Override
        protected String doInBackground(Void... params) {
            return uploadFile();
        }

        @SuppressWarnings("deprecation")
        public String uploadFile() {
            String responseString = null;

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL);

            try {

                AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                        new AndroidMultiPartEntity.ProgressListener() {

                            @Override
                            public void transferred(long num) {
                                publishProgress((int) ((num / (float) totalSize) * 100));
                            }
                        });
                File sourceFile = new File(filePath);

                // Adding file data to http body
                entity.addPart("video", new FileBody(sourceFile));
                totalSize = entity.getContentLength();
                httppost.setEntity(entity);
                // Making server call
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity r_entity = response.getEntity();

                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 200) {
                    // Server response
                    Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath,
                            MediaStore.Images.Thumbnails.MINI_KIND);
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    thumb.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                    byte[] thumbnailBitmapBytes = stream.toByteArray();

                    db=openOrCreateDatabase("TwentyThree", Context.MODE_PRIVATE, null);

                    SQLiteStatement stmt = db.compileStatement("INSERT INTO videos (path, thumbnail) values (?, ?)");
                    stmt.bindString(1, serverPath);
                    stmt.bindBlob(2, thumbnailBitmapBytes);
                    stmt.executeInsert();


                    responseString = EntityUtils.toString(r_entity);
                } else {
                    responseString = "Error occurred! Http Status Code: "
                            + statusCode;
                }

            } catch (ClientProtocolException e) {
                responseString = e.toString();
            } catch (IOException e) {
                responseString = e.toString();
            }

            return responseString;

        }

        @Override
        protected void onPostExecute(String result) {
            Log.e(TAG, "Response from server: " + result);

            // showing the server response in an alert dialog
            showAlert(result);

            super.onPostExecute(result);
        }

    }

    /**
     * Method to show alert dialog
     * */
    private void showAlert(String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message).setTitle("Response from Servers")
                .setCancelable(false)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        UploadActivity.this.finish();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
    }

}

编辑2: enter image description here

0 个答案:

没有答案