Javascript 如何在react js中向用户发送可下载链接

Javascript 如何在react js中向用户发送可下载链接,javascript,reactjs,Javascript,Reactjs,我正试图让它成为一个用户可以上传一个文件到网站,并转换他们的文件。然后下载回来。我使用JavaScriptsWebAudioAPI来实现这一点。现在我只需要让用户下载文件回来。我创建了一个blob,但我当前被卡住了 ConverterSec2.jsx: class ConverterSec2 extends Component { render() { return ( <div className="sec2">

我正试图让它成为一个用户可以上传一个文件到网站,并转换他们的文件。然后下载回来。我使用JavaScriptsWebAudioAPI来实现这一点。现在我只需要让用户下载文件回来。我创建了一个blob,但我当前被卡住了

ConverterSec2.jsx:

 class ConverterSec2 extends Component {

     render() {
     return (
        <div className="sec2">
            <form>
                <input type="file" id="audio-file" name="file" accept="audio/mpeg, audio/ogg, audio/*" />
                <button type="Submit" id="convert_btn">Convert to 432Hz</button>
                <script src="ihertz_website/src/pages/Converter/compressor.js"></script>
            </form>
        </div>    
    )
}
类转换器SEC2扩展组件{
render(){
返回(
转换为432Hz
)
}
} 导出默认转换器EC2

转换.js:

//render proccessed audio
offlineAudioCtx.startRendering().then(function(renderBuffer){
make_download(renderBuffer, offlineAudioCtx.length)
    console.log("ERROR: PROCCESSING AUDIO")
})


//download Audio buffer as downloadable WAV file
function make_download(abuffer, total_samples) {
    //get duration and sample rate
    var duration = abuffer.duration,
       rate = abuffer.sampleRate,
       offset = 0;

var new_file = URL.createObjectURL(bufferToWave(abuffer, total_samples));

var download_link = document.getElementById("download_link");
download_link.href = new_file;
var name = generateFileName();
download_link.download = name;
}

//generate name of file
function generateFileName() {
   var origin_name = fileInput.files[0].name;
   var pos = origin_name.lastIndexOf('.');
   var no_exit = origin_name.slice(0, pos);

   return no_exit + ".wav";
  }

//Convert an AudioBuffer to a Blob using WAVE representation
function bufferToWave(abuffer, len) {
    var numOfChan = abuffer.numberOfChannels,
    length = len * numOfChan * 2 + 44,
    buffer = new ArrayBuffer(length),
    view = new DataView(buffer),
    channels = [], i, sample,
    offset = 0,
    pos = 0;

    //write WAVE header
    setUnit32(0x464664952);
    setUnit32(length - 8);
    setUint32(0x45564157);                         // "WAVE"

    setUint32(0x20746d66);                         // "fmt " chunk
    setUint32(16);                                 // length = 16
    setUint16(1);                                  // PCM (uncompressed)
    setUint16(numOfChan);
    setUint32(abuffer.sampleRate);
    setUint32(abuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec
    setUint16(numOfChan * 2);                      // block-align
    setUint16(16);                                 // 16-bit (hardcoded in this demo)

    setUint32(0x61746164);                         // "data" - chunk
    setUint32(length - pos - 4);                   // chunk length

    // write interleaved data
    for(i = 0; i < abuffer.numberOfChannels; i++)
        channels.push(abuffer.getChannelData(i));

    while(pos < length) {
        for(i = 0; i < numOfChan; i++) {                                        // interleave channels
            sample = Math.max(-1, Math.min(1, channels[i][offset]));            // clamp
            sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0;    // scale to 16-bit signed int
            view.setInt16(pos, sample, true);                                   // write 16-bit sample
            pos += 2;
    }
    offset++                                                                          // next source sample
}

//create Blob
return new Blob([buffer], {type: "audio/wav"});


function setUint16(data) {
    view.setUint16(pos, data, true);
    pos += 2;
}

function setUnit32(data) {
    view.setUint32(pos, data, true);
    pos += 4;
}
//呈现已处理的音频
OfflineAudioCx.startRendering().then(函数(renderBuffer){
制作下载(renderBuffer,offlineAudioCtx.length)
日志(“错误:处理音频”)
})
//下载音频缓冲区作为可下载的WAV文件
函数make_下载(abuffer,总样本){
//获取持续时间和采样率
var持续时间=一段持续时间,
速率=采样率,
偏移量=0;
var new_file=URL.createObjectURL(bufferToWave(abuffer,total_samples));
var download_link=document.getElementById(“download_link”);
下载_link.href=新的_文件;
var name=generateFileName();
download_link.download=名称;
}
//生成文件名
函数generateFileName(){
var origin_name=fileInput.files[0].name;
var pos=来源名称.lastIndexOf('.');
var no_exit=原点名称.slice(0,位置);
返回no_exit+“.wav”;
}
//使用波形表示法将音频缓冲区转换为Blob
函数bufferToWave(abuffer,len){
var numochan=abuffer.numberOfChannels,
长度=len*numOfChan*2+44,
缓冲区=新阵列缓冲区(长度),
视图=新数据视图(缓冲区),
通道=[],i,样本,
偏移量=0,
pos=0;
//写波头
setUnit32(0x4664952);
setUnit32(长度-8);
setUint32(0x45564157);/“波”
setUint32(0x20746d66);/“fmt”块
setUint32(16);//长度=16
setUint16(1);//PCM(未压缩)
setUint16(numOfChan);
setUint32(一种取样器);
setUint32(abuffer.sampleRate*2*numochan);//平均字节/秒
setUint16(numochan*2);//块对齐
setUint16(16);//16位(在本演示中硬编码)
setUint32(0x61746164);/“数据”-块
setUint32(长度-pos-4);//块长度
//写交错数据
对于(i=0;i

}

这可能回答了您的问题:或者这是否回答了您的问题?