當您需要將本地不超過5 GB大小的檔案、圖片、視頻等資源上傳到OSS,且對並發上傳效能要求不高的情況下,您可以選擇簡單上傳的方式。
前提條件
已建立儲存空間(Bucket)。更多資訊,請參見建立儲存空間。
使用限制
簡單上傳的檔案大小不能超過5 GB。超過5 GB的檔案上傳請使用分區上傳。
注意事項
資料安全
防止覆蓋同名Object
簡單上傳預設會覆蓋同名Object,您可以選擇以下任意方式防止Object被意外覆蓋。
開啟版本控制功能
開啟版本控制功能後,被覆蓋的Object會以歷史版本的形式儲存下來。您可以隨時恢複歷史版本Object。更多資訊,請參見版本控制介紹。
在上傳請求中攜帶禁止覆蓋同名Object的參數
在上傳請求的Header中攜帶參數x-oss-forbid-overwrite,並指定其值為true。當您上傳的Object在OSS中存在同名Object時,該Object會上傳失敗,並返回
FileAlreadyExists
錯誤。當不攜帶此參數或此參數的值為false時,同名Object會被覆蓋。
授權上傳
為了防止第三方使用者未經授權在您的Bucket中上傳資料,OSS提供了Bucket和Object層級的存取權限控制。更多資訊,請參見存取控制。
使用簽名URL授權第三方使用者上傳指定檔案。簽名URL允許第三方使用者在沒有安全憑證或者授權的情況下進行上傳操作。第三方使用者使用簽名URL上傳檔案後,OSS將在指定的Bucket產生該檔案。使用檔案URL上傳檔案。
降低PUT類請求費用
如果要上傳的檔案數量較多,直接指定上傳的檔案類型為深度冷歸檔類型會造成較高的PUT類請求費用。建議您先將檔案的儲存類型指定為標準儲存進行上傳,然後通過生命週期規則將其轉儲為深度冷歸檔類型,從而降低PUT類請求費用。
避免影響OSS-HDFS服務
為避免影響OSS-HDFS服務的正常使用或者引發資料丟失的風險,在開通了OSS-HDFS服務的Bucket中,禁止以非OSS-HDFS服務提供的方式在OSS-HDFS的資料存放區目錄.dlsdata/
中上傳Object。
上傳效能調優
如果您在上傳大量Object時,在命名上使用了順序首碼(如時間戳記或字母順序),可能會出現大量Object索引集中儲存於儲存空間中某個特定分區的情況,進而導致請求速率下降。建議您在上傳大量Object時,不要使用順序首碼的Object名稱,而是將順序首碼改為隨機性首碼。具體操作,請參見OSS效能最佳實務。
操作步驟
使用OSS控制台
金融雲下的OSS沒有公網地區,無法通過控制台上傳檔案,請通過SDK、ossutil、ossbrowser等方式上傳。
登入OSS管理主控台。
單擊Bucket 列表,然後單擊目標Bucket名稱。
在左側導覽列,選擇文件管理 > 檔案清單。
在檔案清單頁面,單擊上傳文件。
在上傳文件面板,按如下說明配置各項參數。
設定基礎選項。
參數
說明
上傳到
設定檔案上傳到目標Bucket後的儲存路徑。
當前目錄:將檔案上傳到目前的目錄。
指定目錄:將檔案上傳到指定目錄,您需要輸入目錄名稱。若輸入的目錄不存在,OSS將自動建立對應的檔案目錄並將檔案上傳到該目錄中。
目錄命名規範如下:
請使用符合要求的UTF-8字元;長度必須在1~254字元之間。
不允許以正斜線(/)或反斜線(\)開頭。
不允許出現連續的正斜線(/)。
不允許出現名為
..
的目錄。
檔案ACL
設定檔案讀寫權限ACL。
繼承Bucket:以Bucket讀寫權限為準。
私有(推薦):只有檔案Owner擁有該檔案的讀寫權限,其他使用者沒有許可權操作該檔案。
公共讀:檔案Owner擁有該檔案的讀寫權限,其他使用者(包括匿名訪問者)都可以對檔案進行訪問,這有可能造成您資料的外泄以及費用激增,請謹慎操作。
公共讀寫:任何使用者(包括匿名訪問者)都可以對檔案進行訪問,並且向該檔案寫入資料。這有可能造成您資料的外泄以及費用激增,若被人惡意寫入違法資訊還可能會侵害您的合法權益。除特殊情境外,不建議您配置公用讀寫許可權。
有關檔案ACL的更多資訊,請參見設定Object ACL。
待上傳檔案
選擇您需要上傳的檔案或檔案夾。
您可以單擊掃描檔案或掃描文件夾選擇本地檔案或檔案夾,或者直接拖拽目標檔案或檔案夾到待上傳檔案地區。
如果上傳檔案夾中包含了無需上傳的檔案,請單擊目標檔案右側的移除將其移出檔案清單。
重要在未開啟版本控制Bucket中上傳檔案時,如果上傳的檔案與已有檔案同名,則覆蓋已有檔案。
在已開啟版本控制Bucket中上傳檔案時,如果上傳的檔案與已有檔案同名,則上傳檔案將成為最新版本,已有檔案將成為歷史版本。
可選:設定檔案儲存體類型、加密方式等進階選項。
參數
說明
存儲類型
設定檔案儲存體類型。
繼承Bucket:以Bucket儲存類型為準。
標準儲存:提供高可靠、高可用、高效能的Object Storage Service服務,能夠支援頻繁的資料訪問。適用於各種社交、分享類的圖片、音視頻應用、大型網站、巨量資料分析等業務情境。
低頻訪問儲存:提供高持久性、較低儲存成本的Object Storage Service服務。有最小計量單位(64 KB)和最低儲存時間(30天)的要求。支援資料即時訪問,訪問資料時會產生資料取回費用。適用於較低訪問頻率(平均每月訪問頻率1到2次)的業務情境。
Archive Storage:提供高持久性、極低儲存成本的Object Storage Service服務。有最小計量單位(64 KB)和最低儲存時間(60天)的要求。資料需解凍(約1分鐘)後訪問,會產生資料解凍費用。如果開啟歸檔直讀,無需解凍就可以訪問資料,會產生資料直讀取回費用。適用於資料長期儲存的業務情境,例如檔案資料、醫學影像、科學資料、影視素材等。
冷Archive Storage:提供高持久性、比Archive Storage的儲存成本更低的Object Storage Service服務。有最小計量單位(64 KB)和最低儲存時間(180天)的要求。資料需解凍後訪問,解凍時間根據資料大小和選擇的解凍模式決定,解凍會產生資料取回費用以及取回請求費用。適用於需要超長時間存放的冷資料,例如因合規要求需要長期留存的資料、巨量資料及人工智慧領域長期積累的未經處理資料、影視行業長期留存的媒體資源、線上教育行業的歸檔視頻等業務情境。
深度冷Archive Storage:提供高持久性、比冷Archive Storage成本更低的Object Storage Service服務。有最小計量單位(64 KB)和最低儲存時間(180天)的要求。資料需解凍後訪問,解凍時間根據資料大小和選擇的解凍模式決定,解凍會產生資料取回費用以及取回請求費用。適用於需要超長時間存放的極冷資料,例如巨量資料及人工智慧領域的未經處理資料的長期積累留存、媒體資料的長期保留、法規和合規性存檔、磁帶替換等業務情境。
更多資訊,請參見儲存類型介紹。
服務端加密方式
設定檔案的服務端加密方式。
繼承Bucket:以Bucket的伺服器端加密方式為準。
OSS完全託管:使用OSS託管的密鑰進行加密。OSS會為每個Object使用不同的密鑰進行加密,作為額外的保護,OSS會使用主要金鑰對加密金鑰本身進行加密。
KMS:使用KMS預設託管的CMK或指定CMK ID進行加解密操作。KMS對應的加密金鑰說明如下:
alias/acs/oss(CMK ID):使用預設託管的CMK產生不同的密鑰來加密不同的Object,並且在Object被下載時自動解密。
alias/<cmkname>(CMK ID):使用指定的CMK產生不同的密鑰來加密不同的Object,並將加密Object的CMK ID記錄到Object的中繼資料中,具有解密許可權的使用者下載Object時會自動解密。其中
<cmkname>
為建立密鑰時配置的主要金鑰可選標識。使用指定的CMK ID前,您需要在KMS管理主控台建立一個與Bucket處於相同地區的普通密鑰或外部金鑰。具體操作,請參見建立密鑰。
密碼編譯演算法:僅支援AES256。
用戶自訂中繼資料
用於為Object添加描述資訊。您可以添加多條自訂中繼資料(User Meta),但所有的自訂中繼資料總大小不能超過8 KB。添加自訂中繼資料時,要求參數以
x-oss-meta-
為首碼,並為參數賦值,例如x-oss-meta-location:hangzhou。單擊上傳文件。
此時,您可以在上傳列表頁簽查看各個檔案的上傳進度。
使用圖形化管理工具ossbrowser
ossbrowser支援Bucket層級的操作與控制台支援的操作類似,請按照ossbrowser介面指引完成簡單上傳的操作。關於如何使用ossbrowser,請參見快速使用ossbrowser。
使用阿里雲SDK
以下僅列舉常見SDK的簡單上傳的程式碼範例。關於其他SDK的簡單上傳的程式碼範例,請參見SDK簡介。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填寫Bucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 填寫本地檔案的完整路徑,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路徑,則預設從樣本程式所屬專案對應本地路徑中上傳檔案。
String filePath= "D:\\localpath\\examplefile.txt";
// 建立OSSClient執行個體。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 建立PutObjectRequest對象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
// 如果需要上傳時設定儲存類型和存取權限,請參考以下範例程式碼。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上傳檔案。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填寫Bucket名稱,例如examplebucket。
$bucket= "examplebucket";
// 填寫Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。
$object = "exampledir/exampleobject.txt";
// 填寫本地檔案的完整路徑,例如D:\\localpath\\examplefile.txt。如果未指定本地路徑,則預設從樣本程式所屬專案對應本地路徑中上傳檔案。
$filePath = "D:\\localpath\\examplefile.txt";
try{
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
$ossClient->uploadFile($bucket, $object, $filePath);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . "OK" . "\n");
const OSS = require('ali-oss')
const path=require("path")
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// 填寫Bucket名稱。
bucket: 'examplebucket',
});
// 自訂要求標頭
const headers = {
// 指定Object的儲存類型。
'x-oss-storage-class': 'Standard',
// 指定Object的存取權限。
'x-oss-object-acl': 'private',
// 通過檔案URL訪問檔案時,指定以附件形式下載檔案,下載後的檔案名稱定義為example.txt。
'Content-Disposition': 'attachment; filename="example.txt"',
// 設定Object的標籤,可同時設定多個標籤。
'x-oss-tagging': 'Tag1=1&Tag2=2',
// 指定PutObject操作時是否覆蓋同名目標Object。此處設定為true,表示禁止覆蓋同名Object。
'x-oss-forbid-overwrite': 'true',
};
async function put () {
try {
// 填寫OSS檔案完整路徑和本地檔案的完整路徑。OSS檔案完整路徑中不能包含Bucket名稱。
// 如果本地檔案的完整路徑中未指定本地路徑,則預設從樣本程式所屬專案對應本地路徑中上傳檔案。
const result = await client.put('exampleobject.txt', path.normalize('D:\\localpath\\examplefile.txt')
// 自訂headers
,{headers}
);
console.log(result);
} catch (e) {
console.log(e);
}
}
put();
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# 填寫Bucket名稱。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 必須以二進位的方式開啟檔案。
# 填寫本地檔案的完整路徑。如果未指定本地路徑,則預設從樣本程式所屬專案對應本地路徑中上傳檔案。
with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
# Seek方法用於指定從第1000個位元組位置開始讀寫。上傳時會從您指定的第1000個位元組位置開始上傳,直到檔案結束。
fileobj.seek(1000, os.SEEK_SET)
# Tell方法用於返回當前位置。
current = fileobj.tell()
# 填寫Object完整路徑。Object完整路徑中不能包含Bucket名稱。
bucket.put_object('exampleobject.txt', fileobj)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<input id="file" type="file" />
<button id="upload">上傳</button>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
<script>
const client = new OSS({
// yourRegion填寫Bucket所在地區。以華東1(杭州)為例,yourRegion填寫為oss-cn-hangzhou。
region: "yourRegion",
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
accessKeyId: "yourAccessKeyId",
accessKeySecret: "yourAccessKeySecret",
// 從STS服務擷取的安全性權杖(SecurityToken)。
stsToken: "yourSecurityToken",
// 填寫Bucket名稱。
bucket: "examplebucket",
});
// 從輸入框擷取file對象,例如<input type="file" id="file" />。
let data;
// 建立並填寫Blob資料。
//const data = new Blob(['Hello OSS']);
// 建立並填寫OSS Buffer內容。
//const data = new OSS.Buffer(['Hello OSS']);
const upload = document.getElementById("upload");
async function putObject(data) {
try {
// 填寫Object完整路徑。Object完整路徑中不能包含Bucket名稱。
// 您可以通過自訂檔案名稱(例如exampleobject.txt)或檔案完整路徑(例如exampledir/exampleobject.txt)的形式實現將資料上傳到當前Bucket或Bucket中的指定目錄。
// data對象可以自訂為file對象、Blob資料或者OSS Buffer。
const options = {
meta: { temp: "demo" },
mime: "json",
headers: { "Content-Type": "text/plain" },
};
const result = await client.put("examplefile.txt", data, options);
console.log(result);
} catch (e) {
console.log(e);
}
}
upload.addEventListener("click", () => {
const data = file.files[0];
putObject(data);
});
</script>
</body>
</html>
using Aliyun.OSS;
// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// 填寫本地檔案的完整路徑。如果未指定本地路徑,則預設從樣本程式所屬專案對應本地路徑中上傳檔案。
var localFilename = "D:\\localpath\\examplefile.txt";
// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// 上傳檔案。
client.PutObject(bucketName, objectName, localFilename);
Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}
// 構造上傳請求。
// 依次填寫Bucket名稱(例如examplebucket)、Object完整路徑(例如exampledir/exampleobject.txt)和本地檔案完整路徑(例如/storage/emulated/0/oss/examplefile.txt)。
// Object完整路徑中不能包含Bucket名稱。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");
// 設定檔案中繼資料為可選操作。
ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("application/octet-stream"); // 設定content-type。
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); // 校正MD5。
// 設定Object的存取權限為私人。
metadata.setHeader("x-oss-object-acl", "private");
// 設定Object的儲存類型為標準儲存。
metadata.setHeader("x-oss-storage-class", "Standard");
// 設定禁止覆蓋同名Object。
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// 指定Object的對象標籤,可同時設定多個標籤。
// metadata.setHeader("x-oss-tagging", "a:1");
// 指定OSS建立目標Object時使用的伺服器端密碼編譯演算法 。
// metadata.setHeader("x-oss-server-side-encryption", "AES256");
// 表示KMS託管的使用者主要金鑰,該參數僅在x-oss-server-side-encryption為KMS時有效。
// metadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac****");
put.setMetadata(metadata);
try {
PutObjectResult putResult = oss.putObject(put);
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", putResult.getETag());
Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
// 用戶端異常,例如網路異常等。
e.printStackTrace();
} catch (ServiceException e) {
// 服務端異常。
Log.e("RequestId", e.getRequestId());
Log.e("ErrorCode", e.getErrorCode());
Log.e("HostId", e.getHostId());
Log.e("RawMessage", e.getRawMessage());
}
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 建立OSSClient執行個體。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填寫儲存空間名稱,例如examplebucket。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 依次填寫Object的完整路徑(例如exampledir/exampleobject.txt)和本地檔案的完整路徑(例如D:\\localpath\\examplefile.txt)。
err = bucket.PutObjectFromFile("exampledir/exampleobject.txt", "D:\\localpath\\examplefile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// 填寫Bucket名稱,例如examplebucket。
put.bucketName = @"examplebucket";
// 填寫檔案完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// put.uploadingData = <NSData *>; // 直接上傳NSData。
// (可選)設定上傳進度。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 指定當前上傳長度、當前已經上傳總長度、待上傳的總長度。
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// 配置可選欄位。
// put.contentType = @"application/octet-stream";
// 設定Content-MD5。
// put.contentMd5 = @"eB5eJF1ptWaXm4bijSPyxw==";
// 設定Object的編碼方式。
// put.contentEncoding = @"identity";
// 設定Object的展示形式。
// put.contentDisposition = @"attachment";
// 可以在上傳檔案時設定檔案中繼資料或者HTTP頭部。
// NSMutableDictionary *meta = [NSMutableDictionary dictionary];
// 設定檔案中繼資料。
// [meta setObject:@"value" forKey:@"x-oss-meta-name1"];
// 設定Object的存取權限為私人。
// [meta setObject:@"private" forKey:@"x-oss-object-acl"];
// 設定Object的歸檔類型為標準儲存。
// [meta setObject:@"Standard" forKey:@"x-oss-storage-class"];
// 設定覆蓋同名目標Object。
// [meta setObject:@"true" forKey:@"x-oss-forbid-overwrite"];
// 指定Object的對象標籤,可同時設定多個標籤。
// [meta setObject:@"a:1" forKey:@"x-oss-tagging"];
// 指定OSS建立目標Object時使用的伺服器端密碼編譯演算法。
// [meta setObject:@"AES256" forKey:@"x-oss-server-side-encryption"];
// 表示KMS託管的使用者主要金鑰,該參數僅在x-oss-server-side-encryption為KMS時有效。
// [meta setObject:@"9468da86-3509-4f8d-a61e-6eab1eac****" forKey:@"x-oss-server-side-encryption-key-id"];
// put.objectMeta = meta;
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// waitUntilFinished會阻塞當前線程,但是不會阻塞上傳任務進程。
// [putTask waitUntilFinished];
// [put cancel];
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS帳號資訊。*/
/* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填寫Bucket名稱,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。*/
std::string ObjectName = "exampledir/exampleobject.txt";
/* 初始化網路等資源。*/
InitializeSdk();
ClientConfiguration conf;
/* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* 填寫本地檔案完整路徑,例如D:\\localpath\\examplefile.txt,其中localpath為本地檔案examplefile.txt所在本地路徑。*/
std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("D:\\localpath\\examplefile.txt", std::ios::in | std::ios::binary);
PutObjectRequest request(BucketName, ObjectName, content);
/*(可選)請參見如下樣本設定存取權限ACL為私人(private)以及儲存類型為標準儲存(Standard)。*/
//request.MetaData().addHeader("x-oss-object-acl", "private");
//request.MetaData().addHeader("x-oss-storage-class", "Standard");
auto outcome = client.PutObject(request);
if (!outcome.isSuccess()) {
/* 異常處理。*/
std::cout << "PutObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* 釋放網路等資源。*/
ShutdownSdk();
return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* 填寫Bucket名稱,例如examplebucket。*/
const char *bucket_name = "examplebucket";
/* 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content = "More than just cloud.";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* 用char*類型的字串初始化aos_string_t類型。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* 是否使用了CNAME。0表示不使用。*/
options->config->is_cname = 0;
/* 設定網路相關參數,比如逾時時間等。*/
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* 在程式入口調用aos_http_io_initialize方法來初始化網路、記憶體等全域資源。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* 用於記憶體管理的記憶體池(pool),等價於apr_pool_t。其實現代碼在apr庫中。*/
aos_pool_t *pool;
/* 重新建立一個記憶體池,第二個參數是NULL,表示沒有繼承其它記憶體池。*/
aos_pool_create(&pool, NULL);
/* 建立並初始化options,該參數包括endpoint、access_key_id、acces_key_secret、is_cname、curl等全域配置資訊。*/
oss_request_options_t *oss_client_options;
/* 在記憶體池中分配記憶體給options。*/
oss_client_options = oss_request_options_create(pool);
/* 初始化Client的選項oss_client_options。*/
init_options(oss_client_options);
/* 初始化參數。*/
aos_string_t bucket;
aos_string_t object;
aos_list_t buffer;
aos_buf_t *content = NULL;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
aos_list_init(&buffer);
content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
aos_list_add_tail(&content->node, &buffer);
/* 上傳檔案。*/
resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object, &buffer, headers, &resp_headers);
/* 判斷上傳是否成功。*/
if (aos_status_is_ok(resp_status)) {
printf("put object from buffer succeeded\n");
} else {
printf("put object from buffer failed\n");
}
/* 釋放記憶體池,相當於釋放了請求過程中各資源分派的記憶體。*/
aos_pool_destroy(pool);
/* 釋放之前分配的全域資源。*/
aos_http_io_deinitialize();
return 0;
}
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填寫Bucket名稱,例如examplebucket。
bucket = client.get_bucket('examplebucket')
# 上傳檔案。
bucket.put_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')
使用命令列工具ossutil
關於使用ossutil簡單上傳的具體操作, 請參見簡單上傳。
使用REST API
如果您的程式自訂要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多資訊,請參見PutObject。
相關文檔
推薦使用用戶端直傳的方式將檔案上傳到OSS。相對於服務端代理上傳,用戶端直傳避免了商務服務器中轉檔案,提高了上傳速度,節省了伺服器資源。更多資訊,請參見用戶端直傳。
在使用簡單上傳的情況下,可以攜帶Object Meta資訊對Object進行描述,例如設定Content-Type等標準HTTP頭,也可以設定自訂資訊。關於Object Meta的更多資訊,請參見設定檔案中繼資料。
在檔案上傳到OSS後,您可以通過上傳回調向指定的應用伺服器發起回調請求。具體操作,請參見上傳回調。
如果您希望對上傳的圖片進行壓縮、添加自訂樣式等操作。更多資訊,請參見圖片處理操作方式。
如果上傳圖片後需要擷取圖片大小資訊,您可以使用
?x-oss-process=image/info
返回圖片的基本資料。更多資訊, 參見擷取資訊。如果您希望對上傳的圖片或者視頻等進行文字識別、字幕提取、視頻轉碼、產生視頻封面等處理,請參見ApsaraVideo for Media Processing。
檔案上傳完成後,您可以在URL中加入簽名資訊,以便將該URL轉給第三方實現授權訪問。更多資訊,請參見在URL中包含簽名。
通過檔案URL訪問檔案時是預覽或者下載的行為取決於網域名稱類型以及Bucket的建立時間。更多資訊,請參見通過檔案URL訪問檔案無法預覽而是以附件形式下載?。
使用Hadoop、Spark等運行批次工作時,可以選擇Object Storage Service作為儲存。上傳檔案後,您可以在ECI中訪問OSS資料。更多資訊,請參見在ECI中訪問OSS資料。
如果您需要在上傳時擷取進度條,請參見上傳進度條。