2017-01-11 93 views
2

嘗試了很多像axios,fetch,fetch-blob沒有成功的第三方館藏。 這段代碼包含了我的php後端。 使用RN v 0.39如何從react-native上傳音頻剪輯到php後端?

上傳已經在手機存儲器中存在服務器音頻剪輯

文件路徑:AudioUtils.MusicDirectoryPath +「/test.aac」 [訪問的路徑,可以播放短片]

使用參考:/github.com/g6ling/react-native-uploader

Server response

「無法爲URI /storage/emulated/0/Music/test.aac檢索文件」

權限

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />              
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

陣營本地代碼

const form= new FormData(); 

form.append('userfile', { 
    uri: AudioUtils.MusicDirectoryPath + '/test.aac', 
    type: 'audio/aac', 
    name: 'userfile' 
}); 

    let xhr = new XMLHttpRequest() 
    xhr.open('post', `http://vidyarangam.com/next/upload_file`) 
    xhr.send(form) 
    xhr.onerror = function(e) { 
    console.log('err', e) 
} 
xhr.onreadystatechange = function() { 
if(this.readyState === this.DONE) { 
    console.log(this.response) 
} 
} 

PHP代碼

function upload_file() { 
    $droidinput = json_decode(file_get_contents('php://input'), true); 
    $file = $droidinput['userfile']; // i have no idea how to upload it 
    $config['upload_path'] = 'uploads/';  
    $config['allowed_types'] = '*'; 
    $config['max_filename'] = '255'; 
    $config['encrypt_name'] = TRUE; 
    $config['max_size'] = '1024'; //1 MB 
    $this->load->library('upload', $config); 

    if (!$this->upload->do_upload('userfile')) { 
     echo json_encode('status'=>'File upload error');  
    } else { 
     echo json_encode('status'=>'File successfully uploaded'); 
    }   
} 
+0

,什麼是執行代碼時到底會發生? – gus27

+0

echo json_encode('status'=>'文件上傳錯誤'); –

+0

請檢查服務器響應,我如何上傳這個 –

回答

1

FIX

使用LIB - 反應 - 原生取二進制大對象

代碼

import RNFetchBlob from 'react-native-fetch-blob'; 

    let dirs = RNFetchBlob.fs.dirs; 

    let path_to_a_file = dirs.DownloadDir + '/header_logo.png'; 

    RNFetchBlob.fetch('POST', 'http://192.168.43.236/upload.php', { 
    Authorization : "Bearer access-token", 
    otherHeader : "foo", 
    'Content-Type' : 'multipart/form-data', 
    }, [ 

    { name : 'header_logo', filename : 'header_logo.png', type:'image/foo', data:RNFetchBlob.wrap(path_to_a_file)}, 
    ]).then((resp) => { 

    console.log(resp.text()) 

    }).catch((err) => { 

    console.log(err) 

    })