【问题标题】:Working code for uploading mp3 to server on android将 mp3 上传到 android 上的服务器的工作代码
【发布时间】:2015-12-31 07:37:53
【问题描述】:

我已经到处搜索了用于将 mp3 或类似文件上传到 php 服务器的好代码,并测试了 10 多个示例,但到目前为止没有一个成功。我检查过的大多数代码要么充满错误,要么使用过时的库。

如果有人有真正有效的代码示例,我将不胜感激。可能是使用 volley 或类似库的。将不胜感激任何帮助或一些代码指出我正确的方向。

谢谢

【问题讨论】:

    标签: android networking upload android-volley


    【解决方案1】:

    您可以使用 loopj Android Asynchronous Http Client lib 将文件上传到 php 服务器。 从给定链接下载 lib 文件并放入项目的 libs 文件夹并使用此代码上传文件。

    public void postFile(){
        RequestParams params = new RequestParams();
        params.put("fileTitle","MyFile1");
        params.put("file", new File("File Path Here")); // e.g Environment.getExternalStorageDirectory().getPath() + "/test.mp3"
    
        AsyncHttpClient client = new AsyncHttpClient();
    
        client.post("http://www.yourweserviceurlhere.com", params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {
                // TODO Auto-generated method stub
    
            }                                                                                                                                              
        }); 
    }
    

    如果您想要上传进度。那么你可以使用我的自定义设计类。为此还需要common io 2.4 lib 引用将HTTPresponse 转换为字符串。

    public class AsyncLoader {
    private String url;
    private LoaderCallBackHandler mCallback;
    private Context mContext;
    private RequestParams params;
    private RequestHandle handle;
    
    public interface LoaderCallBackHandler {        
        public void onStartUploading();
        public void uploadComplete(String response);
        public void failedWithError(Throwable error);
        public void progressUpdate(long bytesWritten, long bytesTotal);
        public void onCancle();
        public void onFinish();
    }
    
    
    public AsyncLoader(Context mContext,String url,RequestParams params, LoaderCallBackHandler callback) {
        this.mContext = mContext;
        this.url = url;
        this.params = params;
        this.mCallback = callback;     
    
    }
    
    public void startTransfer() {       
        AsynchConfig.mClient.setTimeout(50000);        
        handle = AsynchConfig.mClient.post(mContext, url, params,handlerInterface);
    }    
    private ResponseHandlerInterface handlerInterface = new ResponseHandlerInterface() {
    
        @Override
        public void sendStartMessage() {
            if(mCallback != null) {
                mCallback.onStartUploading();               
            }
    
        }
    
        @Override
        public void sendResponseMessage(HttpResponse response) throws IOException {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                InputStream instream = entity.getContent();
    
                // TODO convert in stream to JSONObject and do whatever you need to
    
                StringWriter writer = new StringWriter();
                IOUtils.copy(instream, writer, Charset.defaultCharset());
                String theString = writer.toString();
    
                if(mCallback != null) {
                    mCallback.uploadComplete(theString);
                }
            }
    
        }
    
        @Override
        public void sendSuccessMessage(int arg0, org.apache.http.Header[] arg1, byte[] arg2) {
    
        }
    
        @Override
        public void sendFailureMessage(int arg0, org.apache.http.Header[] arg1,
                byte[] arg2, Throwable error) {
                if(mCallback != null) {
                     mCallback.failedWithError(error);
                }
        }
    
        @Override
        public void sendFinishMessage() {
            if(mCallback != null) {
                mCallback.onFinish();
            }
        }
    
        @Override
        public void sendProgressMessage(long bytesWritten, long bytesTotal) {
            if(mCallback != null) {             
                mCallback.progressUpdate(bytesWritten, bytesTotal);
            }
    
        }
    
        @Override
        public void setUseSynchronousMode(boolean arg0) {
        }
    
        @Override
        public void setRequestURI(URI arg0) {
        }
    
        @Override
        public void setRequestHeaders(org.apache.http.Header[] arg0) {
        }
    
        @Override
        public URI getRequestURI() {
            return null;
        }
        @Override
        public org.apache.http.Header[] getRequestHeaders() {
            return null;
        }
    
        @Override
        public void sendCancelMessage() {
    
            if(mCallback != null) {
                mCallback.onCancle();
                mCallback.onFinish();
            }
        }
    
        @Override
        public void sendRetryMessage(int retryNo) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public boolean getUseSynchronousMode() {
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public void setUsePoolThread(boolean usePoolThread) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public boolean getUsePoolThread() {
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public void onPreProcessResponse(ResponseHandlerInterface instance,
                HttpResponse response) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onPostProcessResponse(ResponseHandlerInterface instance,
                HttpResponse response) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void setTag(Object TAG) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public Object getTag() {
            // TODO Auto-generated method stub
            return null;
        }
    };
    
    /**
    * Cancel upload by calling this method
    */
    public void cancel() throws Exception {
        AsynchConfig.mClient.cancelAllRequests(true);
        handle.cancel(true);
    
    }
    }
    

    异步配置类

    public final class AsynchConfig {   
         public static AsyncHttpClient mClient = new AsyncHttpClient();
    }
    

    使用

    RequestParams params = new RequestParams();
    params.put("fileTitle","MyFile1");
    params.put("file", new File("File Path Here")); // e.g Environment.getExternalStorageDirectory().getPath() + "/test.mp3"
    
    AsyncLoader asyncUploader = new AsyncLoader(this, "URL_HERE", params, callHandler);
    asyncUploader.startTransfer();
    

    CallHandler 接口对象

    LoaderCallBackHandler callHandler = new LoaderCallBackHandler() {
    
        @Override
        public void uploadComplete(String response) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void progressUpdate(long bytesWritten, long bytesTotal) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onStartUploading() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onFinish() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onCancle() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void failedWithError(Throwable error) {
            // TODO Auto-generated method stub
    
        }
    };
    

    用于处理上传文件的 PHP 服务

    if(isset($_FILES['file']) && isset($_POST['fileTitle']) ) {
    include './config.php';
    
    //Randomly genrate file name
    $stickerTmp = explode(".", $_FILES["file"]["name"]);
    $file = md5(date("l, F d, Y h:i" ,time()) . (microtime())).".".end($stickerTmp);
    
    //geting the temp location of file
    $filetemploc=$_FILES['file']['tmp_name']; 
    
    //path for uploading to the specific location
    $pathandname="file_store/".$file;
    
    // moving the file to specified path
    $resultUpload = move_uploaded_file($filetemploc, $pathandname);
    
    // if file is successfully moved to over specified path then insert the reference into the DB
    if($resultUpload == TRUE) {
        //echo "File has been moved from : ". $filetemploc . " to  :".$pathandname;
    
        $qInsert = "INSERT INTO file_lists values (null,'".$_POST['fileTitle']."','".$file."') ";
        mysql_query($qInsert);
    }
    
    }
    

    【讨论】:

    • 谢谢。将尽快尝试,但如果您可以添加 PHP 代码以在服务器上接收文件,将不胜感激。
    • 谢谢。正要发布它实际上与我自己的 php 代码一起工作。这是迄今为止我见过的最好和最简单的文件上传代码。如此简单快捷。再次感谢。我还没有尝试过您的自定义类,但该功能运行良好。还将尝试处理大文件,看看效果如何。
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多