none.gif

6910cb2e

有前端大佬吗?求助(已解决, 感谢大佬, 给以后遇到问题的萌新们留个历史)

需求, 图片二进制 转 图片 直接显示
坑1: 返回blob
我尝试了
1. 返回的二进制用new Blob([blob], {type:'image/jpeg'}), 这个不行
2.在请求头加responseType::'blob'

油猴脚本的GM_xmlhttpRequest, 是直接加上responseType::'blob',即可, 我之前是在加headers:{}里, 不看文档的下场
坑2: 不能用函数返回(也可能是我姿势有问题)
就是这个搞了我最久
为了简洁美观, 我是先搞一个函数发请求获取数据, 获取后, 再createObjectURL, 要么undefined, 要么其他.我尝试了各种组合
(先return数据再createObjectURL,或者先createObjectURL在return url,都不行), 最后把函数去掉, 直接写请求请求完createObjectURL, 再直接img.src = link,最后成功了


因为我看到大佬们各种方法都离不开createObjectURL, 所以我感觉是我这里错了,感谢大佬

--------分割线-----------------------------------------

在写油猴脚本:
我从链接直接获取图片源数据, 然后我该怎么把这个图片显示出来啊.
首先排除直接.src=这个图片链接, 因为refer限制403.


A3EZatGHlB4J5ro.png

Neko

B1F  2021-09-25 23:42
(自购贴均为原档)
我想错了
原来js搞不了referer

1366335.png

mokona

B2F  2021-09-25 23:43
(vessalius)
咱只是8月份刚接触前端,不过,关于前端显示图片流的问题,你可以试试图片转base64,然后解码。 反正我是这么做的。

1366335.png

mokona

B3F  2021-09-25 23:44
(vessalius)
静态的资源,或者晚上的连接,可以直接使用src引用好像。不过我当时是要前后端通信,后端传图片给前端,所以需要把后端传过来的图片流按照base64解码。

none.gif

Neptunium

B4F  2021-09-25 23:47
(zongzhengcl)
我七月份开始学的,学的aspnet和jjquery,怎么完全看不懂楼上在说啥,忽然觉得自己瞎学了俩月   

1343747.jpg

岁晚煎堆

B5F  2021-09-25 23:54
([sell=0]头像无出处[/sell])
浏览器的图片?控制台看流怎么加载就行

none.gif

无弦

用 Header Editor 试试
https://he.firefoxcn.net/

1366335.png

mokona

B7F  2021-09-26 00:05
(vessalius)
咱大致参照的应该是这个。有兴趣可以试试。
https://www.cnblogs.com/m1754171640/p/14187567.html

none.gif

6910cb2e

回 1楼(House M.D.) 的帖子

我也看到blobl, 我是用油猴脚本,
我试了油猴的GM_xmlhttpRequest, 附加请求头也附加了blob , 最后提示createObjectURL错误.
然后也试了XMLHttpRequest, 好像发不出请求    , 现在很纠结

none.gif

6910cb2e

回 7楼(mokona) 的帖子

图片:
不行, 第二步, 我加了responseType:"arraybuffer", 返回值还是不变, 应该是服务器没做对应的返回方法.

none.gif

6910cb2e

回 6楼(无弦) 的帖子

配合这个可以, 但让我感觉像开了修改器一样, 心理很不爽   
关键是我还是不懂该怎么直接解析并显示出来, 心理很难受

A3EZatGHlB4J5ro.png

Neko

B11F  2021-09-26 00:54
(自购贴均为原档)
前端我不太熟,但是这个方法应该是对的,后端不用做其他处理了
你和别人的对比看看是不是漏了什么?
https://www.cnblogs.com/m1754171640/p/14187567.html
复制代码
  1. // 图片接口
  2. export const getPicList = (params) => {
  3.     return request({
  4.         url: Vue.prototype.BASE_URL + '/examiner/showpic',
  5.         method: 'get',
  6.         params: { ...params },
  7.         responseType: 'arraybuffer'
  8.     })
  9. }//img标签
  10.   <img class="imgWH" :src="fileField" alt />
  11.  
  12.   
  13.   //请求图片接口并且对文件流进行处理
  14.  let picParam = {
  15.         filename: decodeURIComponent(row.bioinformaticsFilePath),
  16.       };
  17.       getPicList(picParam).then((res) => {
  18.         var data = res.data;
  19.         this.fileField =
  20.           "data:image/png;base64," +
  21.           btoa(
  22.             new Uint8Array(data).reduce(
  23.               (data, byte) => data + String.fromCharCode(byte),
  24.               ""
  25.             )
  26.           );
  27.       });

none.gif

6910cb2e

回 11楼(House M.D.) 的帖子

问题是在第二步, 他是加了这个请求头后, 返回ArrayBuffer数据, 我加了这个请求头后, 还是返回图1 的数据

1185926.jpg

奥利维尔

仅提供一个思路,图片文件头是JFIF 之前的是什么我就不知道了 你可以试试删除前面的

1070442.jpg

萧莎碧

B14F  2021-09-26 01:58
(如何变成可爱的男孩子)
不知道你想要什么效果
服务器能直接返回图片的话
要是想从链接得到图片的话
复制代码
  1. async function blobToDataUrl(blob) {
  2.   return new Promise(resolve => {
  3.     const reader = new FileReader();
  4.     reader.onload = e => resolve(e.target.result);
  5.     reader.readAsDataURL(blob);
  6.   });
  7. }
  8. const url = 'https://south-plus.org/p_w_picpath/colorImagination/logo-s-summer2.png'
  9. const response = await fetch(url);
  10. const blob = await response.blob();
  11. const dataurl = await blobToDataUrl(blob);
  12. const w = window.open();
  13. w.document.body.innerHTML = `<img src="${dataurl}" />`;

然后就可以在新窗口中看到图片了

none.gif

6910cb2e

回 14楼(萧莎碧) 的帖子

图片:

SyntaxError: await is only valid in async functions and the top level bodies of modules
JS弱鸡表示不知道怎么改

none.gif

6910cb2e

回 14楼(萧莎碧) 的帖子

图片:
基本全copy

242072.png

磁力球

B17F  2021-09-26 11:14
(我还没有设置个性签名)
不是,你看看content-type是不是搞错了

1070442.jpg

萧莎碧

B18F  2021-09-27 02:30
(如何变成可爱的男孩子)

回 15楼(6910cb2e) 的帖子

用async function包一下

复制代码
  1. async function blobToDataUrl(blob) {
  2.   return new Promise(resolve => {
  3.     const reader = new FileReader();
  4.     reader.onload = e => resolve(e.target.result);
  5.     reader.readAsDataURL(blob);
  6.   });
  7. }
  8. async function main() {
  9.   const url = 'https://south-plus.org/p_w_picpath/colorImagination/logo-s-summer2.png'
  10.   const response = await fetch(url);
  11.   const blob = await response.blob();
  12.   const dataurl = await blobToDataUrl(blob);
  13.   const w = window.open();
  14.   w.document.body.innerHTML = `<img src="${dataurl}" />`;
  15. }
  16. main();

none.gif

6910cb2e

回 18楼(萧莎碧) 的帖子

感谢大佬, 我知道问题在哪了   

3b7aaaaa


239063.png

02d2af74

这TM还是GHS的论坛吗