【问题标题】:How can i sent a video,audio,images from android to server [closed]我如何将视频、音频、图像从 android 发送到服务器 [关闭]
【发布时间】:2015-12-19 21:24:14
【问题描述】:

谁能给我一些信息,我如何将大尺寸的视频从 android 发送到服务器,我已经阅读了很多信息,但我什么也没找到,如何发送视频、音频或图像的最佳方式是一个大尺寸。我在这个网站上看到了一些信息,但是一些信息太旧了,一些信息使用了多部分的 http 客户端,但是所有的源代码都被弃用了,并且 http 客户端在 api 23 中被删除了请对我来说非常重要谢谢 我创建了一个简单的应用程序并将视频保存在手机中,我想暂时使用 wamp 在服务器中发送,并在服务器端使用一个简单的 PHP 代码来接收视频并保存在文件夹中

【问题讨论】:

    标签: php android wamp


    【解决方案1】:

    您可以从这个解释清楚的教程开始 http://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/

    我用自己的业务我可以上传大于 1gb 的文件

    import android.content.Intent;
    import android.os.AsyncTask;
    import android.util.Log;
    import com.thatsit.App;
    import com.thatsit.data.model.Message;
    import com.thatsit.data.model.MessageDataModel;
    import com.thatsit.data.model.RemoteOperation;
    import com.thatsit.interfaces.OnRespondListener;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URI;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Map;
    import javax.net.ssl.HttpsURLConnection;
    
    /**
     * Created by Marco on 29/06/2015.
     */
    /**
     * Uploading the file to server
     * */
    public class UploadFileToServer extends AsyncTask<Void, Integer, String> {
        private static final String TAG = UploadFileToServer.class.getSimpleName();
        public static final String DISPLAY_UPLOAD_PERCENTAGE_ACTION = "com.yourapp.app.UPLOAD_PERCENTAGE";
        public static final String EXTRA_MSG_ID = "message_id";
        public static final String EXTRA_PERCENTAGE = "percent";
    
        private OnRespondListener mListener;
        private long totalSize;
        private Message message;
        public UploadFileToServer(Message message){
            this.message = message;
        }
        @Override
        protected void onPreExecute() {
            // setting progress bar to zero
            //TODO implement progressbar interface
            //progressBar.setProgress(0);
            super.onPreExecute();
            if(mListener == null){
                mListener = new OnRespondListener() {
                    @Override
                    public void onSuccessResponse(String TAG, String resp) {
                        Log.d(TAG,String.valueOf(System.currentTimeMillis()/1000));
                    }
    
                    @Override
                    public void onErrorResponse(String TAG, String Error) {
                        Log.e(TAG,"Error response " + Error);
                    }
                };
            }
        }
    
        @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
            // Notify UI with broadcast message
            Intent i = new Intent(DISPLAY_UPLOAD_PERCENTAGE_ACTION);
            i.putExtra(EXTRA_MSG_ID, message.getId());
            i.putExtra(EXTRA_PERCENTAGE, progress[0]);
            App.getContext().sendBroadcast(i);
            Log.d(TAG, String.valueOf(progress[0]) + "%");
        }
    
        @Override
        protected String doInBackground(Void... params) {
            return uploadFile();
        }
    
        private String uploadFile() {
            String responseString = "";
            int serverResponseCode = 0;
    
            //String fileName = CommonServerAdd.MEDIA_UPLOAD_URL;
    
            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(URI.create(message.getMediaName()));
    
            if (!sourceFile.isFile()) {
                Log.e("uploadFile", "Source File not exist :" + message.getMediaName());
            } else{
                try {
                    // open a URL connection to the Servlet
                    FileInputStream fileInputStream = new FileInputStream(sourceFile);
                    URL url = new URL(CommonServerAdd.MEDIA_UPLOAD_URL);
    
                    // 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(RemoteOperation.KEY_MEDIA_UPLOAD, message.getMediaName());
    
                    dos = new DataOutputStream(conn.getOutputStream());
    
    
                    HashMap<String, String> postDataParams = new HashMap<String, String>();
                    // Extra parameters to pass to web server
                    postDataParams.put(RemoteOperation.OP_OPERATION_TAG, RemoteOperation.OP_UPLOAD_MEDIA);
                    postDataParams.put(MessageDataModel.KEY_SENDER_ID, App.Profile.getUid());
                    postDataParams.put(MessageDataModel.KEY_FROM_ME, String.valueOf(message.getFromMe()));
                    postDataParams.put(MessageDataModel.KEY_DATA, message.getData());
                    postDataParams.put(MessageDataModel.KEY_REMOTE_ID, message.getRemoteId());
                    postDataParams.put(MessageDataModel.KEY_TIMESTAMP, String.valueOf(message.getTimestamp()));
                    postDataParams.put(MessageDataModel.KEY_REMOTE_TABLE_ID, String.valueOf(message.getId()));
                    postDataParams.put(MessageDataModel.KEY_MEDIA_TYPE, String.valueOf(message.getMediaType()));
    
                    for(Map.Entry<String, String> entry : postDataParams.entrySet()){
                        dos.writeBytes(twoHyphens + boundary + lineEnd);
                        dos.writeBytes("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + lineEnd);
                        dos.writeBytes(lineEnd);
                        dos.writeBytes(entry.getValue());
                        dos.writeBytes(lineEnd);
                    }
    
                    //Adding Parameter media file(audio,video and image)
                    dos.writeBytes(twoHyphens + boundary + lineEnd);
                    dos.writeBytes("Content-Disposition: form-data; name=\"media\";filename=\""+ message.getMediaName() + "\"" + 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);
                    long fileLength = sourceFile.length();
                    Log.d(TAG,"totalSize= " + fileLength);
                    int sentBytes=0;
                    while (bytesRead > 0) {
                        dos.write(buffer, 0, bufferSize);
                        // Publish progress
                        sentBytes += bufferSize;
                        publishProgress((int)(sentBytes * 100 / bytesAvailable));
                        bytesAvailable = fileInputStream.available();
                        bufferSize = Math.min(bytesAvailable, maxBufferSize);
                        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                    }
    
    
                    // send multipart form data necessary after file data...
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    
                    // Responses from the server (code and message)
                    serverResponseCode = conn.getResponseCode();
                    String ServerResponseString = conn.getResponseMessage();
    
                    Log.i("uploadFile", "HTTP Response is : "
                            + ServerResponseString + ": " + serverResponseCode);
    
                    if(serverResponseCode == HttpsURLConnection.HTTP_OK){
                        Log.d(TAG,"File Upload Completed.");
                        String line;
                        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                        while ((line=br.readLine()) != null) {
                            responseString +=line;
                        }
                    }
    
                    //close the streams //
                    fileInputStream.close();
                    dos.flush();
                    dos.close();
    
                } catch (MalformedURLException ex) {
                    Log.d(TAG,"MalformedURLException Exception : check script url.");
                    ex.printStackTrace();
                    Log.e(TAG, "error: " + ex.getMessage(), ex);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e(TAG, "Exception : " + e.getMessage(), e);
                }
                //return serverResponseCode;
    
            } // End else block
    
            return responseString;
        }
    
        private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
            StringBuilder result = new StringBuilder();
            boolean first = true;
            for(Map.Entry<String, String> entry : params.entrySet()){
                if (first)
                    first = false;
                else
                    result.append("&");
    
                result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
                result.append("=");
                result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
            }
    
            return result.toString();
        }
    
        @Override
        protected void onPostExecute(String result) {
            Log.d(TAG, "Response from server: " + result);
            super.onPostExecute(result);
            try {
                JSONObject response = new JSONObject(result);
                String success = response.getString(RemoteOperation.RESP_SUCCESS);
                if (Integer.parseInt(success) == 1) {
                    // return confirm
                    mListener.onSuccessResponse(RemoteOperation.OP_MESSAGE_DELIVERED, response.getString("serv_receipt_timestamp"));
                } else {
                    mListener.onErrorResponse(RemoteOperation.OP_MESSAGE_DELIVERED, response.getString(RemoteOperation.RESP_ERR_MESSAGE));
                }
            } catch (JSONException e) {
                e.printStackTrace();
                mListener.onErrorResponse(RemoteOperation.OP_MESSAGE_DELIVERED, e.getMessage());
            }
    
        }
    
        public void setResponseListener(OnRespondListener listener){
            mListener = listener;
        }
    }
    

    PHP:

    /**
     * To test this request send on payload:
     * tag=302&sender_id=5588723e18dd67.58708277&key_from_me=1&data=bla+bla&key_remote_id=55886e677a97d7.22335532&timestamp=12346789&key_tbl_id=20
     *
     * and file to upload on body with var name 'media'
     */
    //Log
    //Read param as get POST
    $post = file_get_contents('php://input');
    $path = $_SERVER['DOCUMENT_ROOT'] . '/UsersFolder/'."Log_media_upload_request.txt";
    file_put_contents($path,$post);
    //var_dump($_POST);
    // array for final json respone
    $response = array(Response::KEY_SUCCESS => 0, Response::KEY_ERROR => 1);
    
    // getting server ip address
    //$server_ip = gethostbyname(gethostname());
    
    // final file url that is being uploaded
    //$file_upload_url = 'http://' . $server_ip . '/' . 'server' . '/' . $target_path;
    
    
    if (
        !isset($_POST[RemoteOperation::OP_OPERATION_TAG]) ||
        !isset($_POST[MessageDataModel::KEY_SENDER_ID])  ||
        !isset($_POST[MessageDataModel::KEY_FROM_ME]) ||
        !isset($_POST[MessageDataModel::KEY_DATA]) ||
        !isset($_POST[MessageDataModel::KEY_REMOTE_ID]) ||
        !isset($_POST[MessageDataModel::KEY_TIMESTAMP]) ||
        !isset($_POST[MessageDataModel::KEY_DEVICE_TABLE_ID]) ||
        !isset($_POST[MessageDataModel::KEY_MEDIA_TYPE]) ||
        !isset($_FILES['media']['name'])
    ){
        $response[Response::KEY_ERROR_MESSAGE] = "Param error";
        echo json_encode($response);
        return;
    }
    $operation = $_POST[RemoteOperation::OP_OPERATION_TAG];
    $unique_id = $_POST[MessageDataModel::KEY_SENDER_ID];
    $mediaType = $_POST[MessageDataModel::KEY_MEDIA_TYPE];
    
    $mediaName = $_FILES['media']['name'];
    
    //check for user exists
    $user = new UserDataModel();
    $myUser = new User();
    
    if(!$myUser = $user->getUserByUid($unique_id)){
        $response[Response::KEY_ERROR_MESSAGE] = "User error";
        echo json_encode($response);
        return;
    }
    $file_upload_url = $_SERVER['DOCUMENT_ROOT'] . '/UsersFolder/' . $unique_id . '/';
    $media_url = 'http://www.yourserver.com/UsersFolder' ."/". $unique_id . '/';
    switch($mediaType){
        case MediaType::IMAGE_PROFILE_THUMB:
            $target_path = $file_upload_url . 'Profile' .'/'.  basename($_FILES['media']['name']);
            $media_url = $media_url . 'Profile' .'/'.  basename($_FILES['media']['name']);
            break;
        case MediaType::IMAGE:
            $target_path = $file_upload_url . 'Image' .'/'. basename($_FILES['media']['name']);
            $media_url = $media_url . 'Image' .'/'. basename($_FILES['media']['name']);
            break;
        case MediaType::VIDEO:
            $target_path = $file_upload_url . 'Video' .'/'. basename($_FILES['media']['name']);
            $media_url = $media_url . 'Video' .'/'. basename($_FILES['media']['name']);
            break;
        case MediaType::AUDIO:
            $target_path = $file_upload_url . 'Audio' .'/'. basename($_FILES['media']['name']);
            $media_url = $media_url . 'Audio' .'/'. basename($_FILES['media']['name']);
            break;
        default:
            $response[Response::KEY_ERROR_MESSAGE] = "Unknown operation";
            echo json_encode($response);
            return;
            break;
    }
    try {
        // Throws exception in case file is not being moved
        if (!move_uploaded_file($_FILES['media']['tmp_name'], $target_path)) {
            // make error flag true
            $response[Response::KEY_ERROR] = 1;
            $response[Response::KEY_ERROR_MESSAGE] = 'Could not move the file!';
        }else {
            //file moved ok, carry on store message to db
            $mess = new MessageDataModel();
            $mediaSize = filesize($target_path);
    
            if($mediaType == MediaType::IMAGE_PROFILE_THUMB){
                //Create small thumb
                //Add row to ProfileImageHistory table
                include_once "DatabaseHandler/ProfileImageHistoryDataModel.php";
                $profileImg = new ProfileImageHistoryDataModel();
                if($result = $profileImg->uploadImageProfile($myUser->getId(),$_POST[MessageDataModel::KEY_SENDER_ID],$mediaName, $mediaType, $mediaSize, $media_url)){
                    // message stored successfully
                    $response[Response::KEY_SUCCESS] = 1;
                    $response[Response::KEY_ERROR] = 0;
                    $response[Response::RESP_SERVER_RECEIPT_TIMESTAMP] = $result;
                } else {
                    // Exception occurred. Make error flag true
                    $response[Response::KEY_ERROR] = 1;
                    $response[Response::KEY_ERROR_MESSAGE] = "Error on store message";
                }
            }else{
                //Store and send message as image Audio or Video
                if ($result = $mess->storeMessage(
                    $_POST[MessageDataModel::KEY_SENDER_ID],
                    $_POST[MessageDataModel::KEY_FROM_ME],
                    $_POST[MessageDataModel::KEY_DATA],
                    $_POST[MessageDataModel::KEY_REMOTE_ID],
                    $_POST[MessageDataModel::KEY_TIMESTAMP],
                    $_POST[MessageDataModel::KEY_DEVICE_TABLE_ID],
                    $mediaName, $mediaType, $mediaSize, $media_url)
                ) {
                    // message stored successfully
                    $response[Response::KEY_SUCCESS] = 1;
                    $response[Response::KEY_ERROR] = 0;
                    $response[Response::RESP_SERVER_RECEIPT_TIMESTAMP] = $result;
                } else {
                    // Exception occurred. Make error flag true
                    $response[Response::KEY_ERROR] = 1;
                    $response[Response::KEY_ERROR_MESSAGE] = "Error on store message";
                }
            }
        }
    } catch (Exception $e) {
        // Exception occurred. Make error flag true
        $response[Response::KEY_ERROR] = 1;
        $response[Response::KEY_ERROR_MESSAGE] = "Server exception " . $e->getMessage();
    }
    
    echo json_encode($response);
    

    【讨论】:

    • 我现在会尝试希望它会工作,谢谢你如果工作我会接受答案
    • 使用前要小心,需要根据自己的需要改变很多var。
    • Okej 但是这里需要一个数据库?
    • 我使用数据库来存储其他信息,例如来自日期时间的消息等,但您可以跳过。我已经用 chrome 的 Advanced Rest 客户端进行了测试......如果你喜欢请不要忘记投票 tnks
    • 是的,我有投票权,如果可行,我会接受答案,因为现在我正在使用手机
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 2020-01-07
    • 2016-06-20
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2011-06-16
    相关资源
    最近更新 更多