最近项目需要把附件部署到阿里云oss,集成过程中发现上传的图片不能直接打开预览,只能下载到本地保存。
解决办法:设置ContentType
var endpoint="阿里云OSS EndPoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
var accessKeyId="阿里云OSS AccessKeyId";
var accessKeySecret="阿里云OSS AccessKeySecret";
// 填写Bucket名称。
var bucketName="阿里云OSS BucketName";
var client=new OssClient(endpoint, accessKeyId, accessKeySecret);
// 创建上传文件的元信息,可以通过文件元信息设置HTTP header。
ObjectMetadata meta=new ObjectMetadata();
string contentType=IOHelper.GetContentType(Path.GetExtension(path));
meta.ContentType="image/jpeg";//这里可自行根据二手转让附件格式封装方法获取
//meta.ContentEncoding="utf-8";
var objectName="upload/1.txt"; //这里需要注意,本地一般用/开头,但是阿里云oss不能用/开头
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
var localFilename=IOHelper.MapPath(path);
client.PutObject(bucketName, objectName, localFilename, meta);
meta.ContentType="image/jpeg";//这段是关键,不定义的话阿里云oss会默认application/octet-stream,所有附件都会被当成二进制流(或不确定文件类型)下载。
还有一个注意点是objectName不能用斜划线/开头,往往我们以前做的本地上传都是/开头的,这里需要注意处理一下,否则阿里云会返回错误。