php 七牛云fetch,[已解决] 将二进制文件传到七牛云, fetch 下来却异常?

发生什么事情了?

小弟今天学习webassmbly遇到了这样一件事情。

我在把我 弄好 的wasm模块文件上传到七牛云,再在本地通过fetch来获取这个wasm模块文件进行使用的时候,总是报告编译错误,如下

CompileError: WasmCompile: Compiling WASM function #32 failed:: return[0] expected type i32, found f32.load of type f32 @+3

后来通过断点发现是fetch下来的wasm模块文件有问题,内部的二进制编码变乱了,而且添加了额外的内容,甚至大小从原本的147byte,变成了19Kb。

// 环境检测

var root = this,

isBrowserSide = false;

if (typeof window !== "undefined" && root === window) {

isBrowserSide = true;

}

// 获取 wasm 并且导入

function fetchAndInstantiateWasm(url, imports) {

return fetch(url) // url could be your .wasm file

.then(res => {

if (res.ok) {

if (this.isBrowserSide) return res.arrayBuffer();

else return res.buffer();

}

throw new Error(`Unable to fetch Web Assembly file ${url}.`);

})

.then(bytes => {

// --- 测试用 START ---

console.log(bytes) // 在此打印出加载的文件的 bytes 信息

// 当使用本地文件时 // `bytes`为长度为 147 的二进制数组,并且顺利执行程序。

// 而使用上传文件时 // `bytes`为长度为 18670 的二进制数组,并且在下一步`WebAssembly.compile(bytes)`报错,

// --- 测试用 END ---

return WebAssembly.compile(bytes);

})

.then(module => WebAssembly.instantiate(module, imports || {}))

.then(instance => instance.exports);

}

// 调用函数

fetchAndInstantiateWasm("http://osgc6x3up.bkt.clouddn.com/test.wasm")

.then(ex => {

console.log(ex.add(1, 2))

});

本地文件 test.wasm(147 byte)

00000000: 00 61 73 6d 01 00 00 00 01 0a 02 60 00 00 60 02 .asm.......`..`.

00000010: 7f 7f 01 7f 03 03 02 00 01 05 03 01 00 01 06 0b ................

00000020: 02 7f 01 41 00 0b 7f 01 41 00 0b 07 10 02 03 61 ...A....A......a

00000030: 64 64 00 01 06 6d 65 6d 6f 72 79 02 00 08 01 00 dd...memory.....

00000040: 0a 11 02 06 00 23 00 24 01 0b 08 00 20 00 20 01 .....#.$........

00000050: 6a 0f 0b 0b 0e 01 00 41 08 0b 08 00 00 00 00 00 j......A........

00000060: 00 00 00 00 2e 04 6e 61 6d 65 01 1a 02 00 12 5f ......name....._

00000070: 5f 57 41 53 4d 5f 49 4e 49 54 49 41 4c 49 5a 45 _WASM_INITIALIZE

00000080: 52 01 03 61 64 64 02 0b 02 00 00 01 02 00 01 61 R..add.........a

00000090: 01 01 62 ......

...

...

Total 18670 Byte

通过浏览器下载的文件 test.wasm(有省略) (19kb)

00000000: 00 61 73 6d 01 00 00 00 01 3d 0a 60 03 7f 7f 7f .asm.....=.`....

00000010: 01 7f 60 02 7f 7f 01 7f 60 01 7f 01 7f 60 02 7f ..`.....`....`..

00000020: 7f 00 60 04 7f 7f 7f 7f 01 7f 60 05 7f 7f 7f 7f ..`.......`.....

00000030: 7f 01 7f 60 03 7f 7f 7f 00 60 00 00 60 01 7f 00 ...`.....`..`...

00000040: 60 03 7d 7d 7d 01 7f 03 26 25 00 00 00 01 00 01 `.}}}...&%......

00000050: 02 01 03 00 00 00 00 00 04 05 04 00 01 02 02 02 ................

00000060: 01 02 01 02 06 07 02 08 09 01 02 02 09 01 08 05 ................

00000070: 03 01 00 01 06 0b 02 7f 01 41 00 0b 7f 01 41 00 .........A....A.

00000080: 0b 07 97 04 1f 06 6d 65 6d 6f 72 79 02 00 06 6d ......memory...m

00000090: 65 6d 63 6d 70 00 00 06 6d 65 6d 63 70 79 00 01 emcmp...memcpy..

000000a0: 06 6d 65 6d 73 65 74 00 02 0d 63 72 65 61 74 65 .memset...create

000000b0: 5f 6d 73 70 61 63 65 00 03 17 63 72 65 61 74 65 _mspace...create

000000c0: 5f 6d 73 70 61 63 65 5f 77 69 74 68 5f 62 61 73 _mspace_with_bas

000000d0: 65 00 04 19 6d 73 70 61 63 65 5f 74 72 61 63 6b e...mspace_track

000000e0: 5f 6c 61 72 67 65 5f 63 68 75 6e 6b 73 00 05 0e _large_chunks...

000000f0: 64 65 73 74 72 6f 79 5f 6d 73 70 61 63 65 00 06 destroy_mspace..

00000100: 0d 6d 73 70 61 63 65 5f 6d 61 6c 6c 6f 63 00 07 .mspace_malloc..

00000110: 0b 6d 73 70 61 63 65 5f 66 72 65 65 00 08 0d 6d .mspace_free...m

00000120: 73 70 61 63 65 5f 63 61 6c 6c 6f 63 00 09 0e 6d space_calloc...m

00000130: 73 70 61 63 65 5f 72 65 61 6c 6c 6f 63 00 0a 17 space_realloc...

00000140: 6d 73 70 61 63 65 5f 72 65 61 6c 6c 6f 63 5f 69 mspace_realloc_i

00000150: 6e 5f 70 6c 61 63 65 00 0c 0f 6d 73 70 61 63 65 n_place...mspace

00000160: 5f 6d 65 6d 61 6c 69 67 6e 00 0d 19 6d 73 70 61 _memalign...mspa

00000170: 63 65 5f 69 6e 64 65 70 65 6e 64 65 6e 74 5f 63 ce_independent_c

00000180: 61 6c 6c 6f 63

十年后

不,并没有十年后,但也是费劲了小弟的一番努力才在写到这的时候,我突然有了头绪。

因为一直都是上传同一个名字的本地文件test.wasm,覆盖的也是七牛云空间上的test.wasm,而正巧之前第一次传入的是一个没有弄好的 19kb 的test.wasm,也就因此造成了这个问题。

简单来说——没有覆盖成功。于是小弟以新的文件名再此上传试了试,竟然就成功了!

o_1bk2e5rhmac53q6atvrdoqcjh.jpg

但是为什么没有覆盖成功呐,

小弟确实按照文档来进行了覆盖上传的操作了啊。

// ...other things above...

var overwrite = true;

let options = {};

if (overwrite) {

options.scope = bucket + ":" + fileName

} else {

options.scope = bucket

}

var putPolicy = new qiniu.rs.PutPolicy(options);

// ...other things following...

而且在七牛云的工作台上,文件的时间和大小在进行覆盖上传之后也都发生了变化。

o_1bk2d2t0d9f01m1f1be91n351g3hh.png

就很气

在之后的测试中

在后来的测试中,发现还是无法覆盖上传成功。

就算在控制台中下载文件能够下载到新上传的文件

o_1bk2dfjjnagh1tgpjiv1g5a9ncf.png

但是通过外链下载的文件仍然是第一次上传的文件

o_1bk2drk0r16qtksq1dp11vvm1q8cp.png

就如下图所示

o_1bk2ds5t549vs16174hlf5lv215.png

我的心情是

o_1bk2dtg25tfp1e6i1re41p7s4vf.jpg

BTW,已交工单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值