最近項目需要把附件部署到阿裡雲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不能用斜劃線/開頭,往往我們以前做的本地上傳都是/開頭的,這裡需要注意處理一下,否則阿裡雲會傳回錯誤。