两种情况:
第一种非代码层 ,确实打不开,纯粹下载问题。必须强制绑定一个自己的二级域名即可,在你的顶级域名下面开一个二级域名,使用pic即可。
绑定域名地址:https://oss.console.aliyun.com/bucket/oss-cn-shenzhen/img-design/transfer/domain
此处不是域名解析那里,可以两个地方都绑定一样的。
处理结果:把图片链接前面的域名https://******.oss-cn-shenzhen.aliyuncs.com/ 这个替换为你的二级域名,类似于pic.baidu.com这种。

第二种情况:代码问题按以下思路解决。

第一种方式:

修改:OssClient.php文件中的 DEFAULT_CONTENT_TYPE的值为image/jpeg。

解释:CONTENT_TYPE在php SDK中设置的值是application/octet-stream : 二进制流数据(如常见的文件下载)。现在我们修改成 image/jpeg :jpg图片格式。所以打开后就能直接预览了。

常见的Http请求中Content-Type:

常见的媒体格式类型如下:text/html : HTML格式text/plain :纯文本格式     text/xml :  XML格式image/gif :gif图片格式   image/jpeg :jpg图片格式image/png:png图片格式
以application开头的媒体格式类型:application/xhtml+xml :XHTML格式application/xml     : XML数据格式application/atom+xml  :Atom XML聚合格式   application/json    : JSON数据格式application/pdf       :pdf格式 application/msword  : Word文档格式application/octet-stream : 二进制流数据(如常见的文件下载)application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

我们来看阿里云的核心上传代码:

/*** Uploads a local file** @param string $bucket bucket name* @param string $object object name* @param string $file local file path* @param array $options* @return null* @throws OssException*/public function uploadFile($bucket, $object, $file, $options = NULL){$this->precheckCommon($bucket, $object, $options);OssUtil::throwOssExceptionWithMessageIfEmpty($file, "file path is invalid");$file = OssUtil::encodePath($file);if (!file_exists($file)) {throw new OssException($file . " file does not exist");}$options[self::OSS_FILE_UPLOAD] = $file;$file_size = filesize($options[self::OSS_FILE_UPLOAD]);$is_check_md5 = $this->isCheckMD5($options);if ($is_check_md5) {$content_md5 = base64_encode(md5_file($options[self::OSS_FILE_UPLOAD], true));$options[self::OSS_CONTENT_MD5] = $content_md5;}if (!isset($options[self::OSS_CONTENT_TYPE])) {$options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object, $file);}$options[self::OSS_METHOD] = self::OSS_HTTP_PUT;$options[self::OSS_BUCKET] = $bucket;$options[self::OSS_OBJECT] = $object;$options[self::OSS_CONTENT_LENGTH] = $file_size;$response = $this->auth($options);$result = new PutSetDeleteResult($response);return $result->getData();}

注意第二个参数¥object,和这行

 if (!isset($options[self::OSS_CONTENT_TYPE])) {$options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object, $file);}

如果没有设置Content-Type,那么就走这里,来看getMimeType($object, $file),

  private function getMimeType($object, $file = null){if (!is_null($file)) {$type = MimeTypes::getMimetype($file);if (!is_null($type)) {return $type;}}$type = MimeTypes::getMimetype($object);if (!is_null($type)) {return $type;}return self::DEFAULT_CONTENT_TYPE;}

这里很明显了,最后返回了什么,系统默认设置,也就是最初定义的常量的地方。
通过了解,我们明白了阿里云设置的默认图片上传格式是下载格式。

第二种方式:

我们将上传的方式修改一下,设置一下上传的Content-Type。
例如:

 /*** 阿里云图片上传* @param $local_path   本地文件或临时文件路径* @return |null*/public function uploadAliyun($local_path){require "../vendor/aliyun-oss-php-sdk-master/autoload.php";$accessKeyId = config('ALIYUN.accessKeyId');$accessKeySecret = config('ALIYUN.accessKeySecret');$endpoint = config('ALIYUN.endpoint');$bucket = config('ALIYUN.bucket');$aliyun_file = md5($local_path.time().rand(1,100000)).'.'.pathinfo($local_path,PATHINFO_EXTENSION);try {$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);$result = $ossClient->uploadFile($bucket, $aliyun_file, $local_path,['Content-Type'=>'image/jpg']);return $result['info']['url'];} catch (\Exception $e) {echo $e->getMessage();return null;}}

将函数$ossClient->uploadFile()第四个参数设定成image/jpg即可。这种方式避免了修改源代码,不使用默认值从而达到预览图片的效果。

下面列出两种方式上传:自选一种必定行,第二个方式还是能防canvas跨域的方法

方法一:uploadFile

 /*** 阿里云图片上传* @param $local_path   本地文件或临时文件路径* @param $aliyunImg    阿里云路径* @param $ext          图片后缀* @return |null*/public function uploadAliyun($local_path,$aliyunImg,$ext){include_once $_SERVER['DOCUMENT_ROOT']."/vendor/aliyun-oss-php-sdk-master/autoload.php";$accessKeyId = 'LTAI4G27kVGxTdtw1ovvATE5';$accessKeySecret = '9HPp1wHOBQGzjnAqRfTz2VfiQxAv2t';$endpoint = 'oss-cn-shenzhen.aliyuncs.com';$bucket = 'hanlusir-shop';try {$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);$result = $ossClient->uploadFile($bucket, $aliyunImg, $local_path,['Content-Type'=>'image/'.$ext]);return $result['info']['url'];} catch (\Exception $e) {echo $e->getMessage();return null;}}

第二个参数阿里云路径可以写成带目录结构的,如果目录不存在的话,阿里云会自动创建目录。

方法二:putObject

/*** 阿里云图片上传* @param $local_path   本地文件或临时文件路径* @param $aliyunImg    阿里云路径   可以带上目录* @param $ext          图片后缀\与上传图片保持一致* @return |null*/
function uploadAliyun( $local_path , $aliyunImg , $ext = 'jpg' )
{include_once $_SERVER['DOCUMENT_ROOT']."/../vendor/aliyun-oss-php-sdk-master/autoload.php";$aliyunInfo = db('aliyun_config')->find(1);$accessKeyId = $aliyunInfo['accessKey_id'];$accessKeySecret = $aliyunInfo['accessKey_secret'];$endpoint = 'oss-cn-shenzhen.aliyuncs.com';$bucket = 'img-ddeessign';$local_path = file_get_contents($local_path);try {$ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);$options = array(\OSS\OssClient::OSS_HEADERS => array('Cache-Control' => 'no-cache','Content-Type'=>'image/'. $ext));$result = $ossClient->putObject($bucket, $aliyunImg, $local_path, $options);$root_path = 'img.7654321.ddeessign';$url = 'img-ddeessign.oss-cn-shenzhen.aliyuncs.com';return str_replace($url, $root_path, $result['info']['url']);} catch (\Exception $e) {echo $e->getMessage();return null;}}

解决:打开阿里云图片显示下载,而不是直接预览的问题相关推荐

  1. 解决:PHP 阿里云OSS访问图片地址默认下载而不是在线预览

    修改文件--保存后再上传图片就可以在线预览了 将阿里云图片属性改为"image/jpg" 也可直接替换下方文件,已经是修改后的了,新上传的图片则不会出现不可在线预览了 image/ ...

  2. 解决阿里云oss访问url直接下载而不是在线预览的问题

    内容参考自网络,若侵权请联系删除   直接给出参考链接即可:   链接一:https://blog.csdn.net/oRanXiaoLuo/article/details/103364928?spm ...

  3. 微信公众号,点击按钮打开pdf文件流,安卓跳转到浏览器里下载,ios可预览但默认不能下载

    微信公众号,点击按钮打开pdf文件流,安卓跳转到浏览器里下载,ios可预览但默认不能下载 注:在pc上开始时采用这两种方式是没有效果的,或者打开的是空页面,但上线到公众号是没有问题的!!!!!!!!! ...

  4. 使用阿里云对象存储上传图片后,在浏览器中访问返回的url地址,直接提示下载,不是预览

    使用阿里云对象存储上传图片后,在浏览器中访问返回的url地址,直接提示下载,不是预览 不想要的效果: 想要效果: 业务逻辑层就是ServiceImpl层 之前代码: package com.ren.o ...

  5. win7计算机无法显示,最新版本:如果无法显示win7计算机的图片预览,该怎么办...

    有时,当我们要浏览图片时,我们发现图片仅显示图标而不显示预览,因此,如果无法显示win7计算机的图片预览,该怎么办?让研究编辑告诉所有人解决问题.显示方法,希望它对大家有帮助. Win7计算机图片预览 ...

  6. fastdfs+nginx+keepalived+openoffice+lua 实现文件上传、下载、水印、预览(word、excel、ppt、txt),feign文件上传

    前言 最近刚刚实现的文件服务中心,记录一下,为没做过的人提供一下思路,由于本人技术有限,不足之处欢迎批评指正,共同学习,共同进步. 目录 Fastdfs集群搭建 搭建keepalived 实现ngxi ...

  7. 微信小程序上传图片及文件(上传、下载、删除及预览)

    微信小程序上传附件 上传文件及图片 下载,预览.删除 自定义封装组件 哪儿用哪儿调用即可 wxml代码 <!-- <view>上传文件(我是子组件)</view> --& ...

  8. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  9. 浏览器显示海康摄像头实时预览画面纯前端解决方案

    浏览器显示海康摄像头实时预览画面纯前端解决方案 将海康设备的 rtsp 协议视频流通过 ffmpeg 转码为 flv 实时视频流,并将实时视频流通过 express 服务生成 http 长链接或 ws ...

  10. Python实现多线程批量下载昵图网的清晰预览图

    我入门Python编程的一个习作:Python多线程下载昵图网的清晰预览图. 目前昵图网(nipic.com)没有限制爬虫,可以用requests来快速打开页面和下载图片. 注意:本文只是示范多线程下 ...

最新文章

  1. C#基础知识梳理系列十:异常处理 System.Exception
  2. torch Dataset类
  3. Linux 问题分析,性能优化
  4. 02 - Unit06:弹出对话框
  5. 1.cocos2dx内存管理和CCArray,CCMenuItem
  6. .net core 学习小结之 JWT 认证授权
  7. iPhone 13系列将首发A15芯片:采用增强版5nm工艺 性能提升20%
  8. PHP扩展详解(一)
  9. 脑电EEG代码开源分享 【2.预处理-静息态篇】
  10. 每个设计师都应该了解的IOS编年史
  11. linux下ssh下载命令,SSH 登录工具常用命令
  12. 根据经纬度坐标点返回所在行政区域实现
  13. NAS 和 SAN 服务器概述
  14. plsql登录Not logged on
  15. Linux align函数,linux内核中ALIGN解析(示例代码)
  16. Kaggle经典项目——房价预测
  17. 浙大 计算机 毕业论文格式,毕业论文格式
  18. Scanvenger游戏制作笔记(三)Unity3D创建对墙体的攻击
  19. 如何制作运营高质量的竞价单页
  20. iOS 监听手机屏幕旋转

热门文章

  1. python数据分析09_pandas数据聚合与分组运算
  2. Lookup函数的使用方法介绍(含VLookup和HLookup)
  3. ai无法启动计算机丢MSVCP100,win7系统丢失MSVCP100.dll导致程序无法启动的解决方法...
  4. 华为服务器如何修改ip地址,华为路由器IP地址设置问题-192.168.1.1进不去
  5. java游戏猿人时代_猿人时代BT版_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  6. Pidgin 插件法解决Ubuntu11.10 QQ
  7. 搭建GitHub免费个人网站(详细教程)
  8. [玩转UE4/UE5动画系统>技能系统(GAS)篇] 二 技能 Gameplay Ability(GA)
  9. python gui测试工具_GitHub - Github-Benjamin/LeChu: Python GUI工具 二次开发
  10. VSCode完美卸载