簡體   English   中英

如何從 C++ 代碼編譯的 Web 程序集開始下載?

[英]How can I start a download from c++ code compiled web assembly?

我一直在努力不做這個 javascript 方面,但我還沒有找到任何令人滿意的東西。 Fetch API 似乎是一個很好的引導,但我似乎找不到在瀏覽器中開始下載的方法,因此它可以下載 zip 文件。

這是 emscripten 代碼片段,但它似乎是某種本地文件。

#include <stdio.h>
#include <string.h>
#include <emscripten/fetch.h>

void downloadSucceeded(emscripten_fetch_t *fetch) {
  printf("Finished downloading %llu bytes from URL %s.\n", fetch->numBytes, fetch->url);
  // The data is now available at fetch->data[0] through fetch->data[fetch->numBytes-1];
  emscripten_fetch_close(fetch); // Free data associated with the fetch.
}

void downloadFailed(emscripten_fetch_t *fetch) {
  printf("Downloading %s failed, HTTP failure status code: %d.\n", fetch->url, fetch->status);
  emscripten_fetch_close(fetch); // Also free data on failure.
}

int main() {
  emscripten_fetch_attr_t attr;
  emscripten_fetch_attr_init(&attr);
  strcpy(attr.requestMethod, "GET");
  attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY;
  attr.onsuccess = downloadSucceeded;
  attr.onerror = downloadFailed;
  emscripten_fetch(&attr, "myfile.dat");
}

將此添加到您的 cpp 文件中。

EM_JS(void, DownloadUrl, (const char* str),
{
    url = UTF8ToString(str);
    var hiddenIFrameID = 'hiddenDownloader';
    var iframe = document.getElementById(hiddenIFrameID);

    if (iframe === null)
    {
        iframe = document.createElement('iframe');
        iframe.id = hiddenIFrameID;
        iframe.style.display = 'none';
        document.body.appendChild(iframe);
    }

    iframe.src = url;
});

以及如何使用它的示例。

void Device::DrawContent()
{
    ImGui::Begin("DW Store");

    if (ImGui::Button("Download"))
    {
        DownloadUrl("https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.402-macos-x64-installer");
    }

    ImGui::End();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM