强制浏览器从Golang返回数据下载

时间:2016-06-18 02:45:35

标签: javascript go request

我有一个Go服务器,为api的端点提供服务。其中一个端点创建一个mp3文件,并返回转换文件的路径或文件的所有字节。我正在寻找两种解决方案之一。

第一个解决方案是允许本地文件访问' href'。我有输出文件字符串" /tmp/audio-hash123.mp3"完成它后,从Go服务器返回。问题是每当我把它传递给' href'为了触发文件下载,它将其视为绝对路径,例如" www.example.com/tmp/audio-hash123.mp3"而不是仅允许本地访问该文件。我在本地可以使用已转换的音频文件,但我的tmp目录显然无法从外部访问,因此每次都会失败。这甚至可能吗?

第二种解决方案是客户端允许基于从服务器返回的实际音频文件进行触发下载,而不仅仅是文件路径。根据html'下载'这个事实我无法想到这是可能的。 attribute基于要下载的文件的路径。有没有办法强制文件下载基于从服务器返回实际的音频文件?

以下是Go服务器的一小部分,它发送回文件路径或实际音频文件(以字节数组形式):

if ReturnFilePath == true {
    //return the filepath for webpage to download
    request.Send(outputFile)
} else {
    //return the audio file
    //get mime type
    mimeType := GetMime(filepath)
    if mimeType != "" {
        req.Ctx.Response.Header.Set("Content-Type", mimeType)
    }

    //open image
    file, err := os.Open(filepath)
    if err != nil {
        req.Send(err.Error())
        return
    }

    //get bytes of image
    bytes, err := ioutil.ReadAll(file)
    if err != nil {
        req.Send(err.Error())
        return
    }

    req.Send(bytes)
}

随着返回的数据,我将方便用JavaScript下载。但是,我需要帮助来弄清楚如何实现这一目标。任何帮助表示赞赏。

0 个答案:

没有答案