當前位置:首頁 » 文件管理 » oss上傳工具

oss上傳工具

發布時間: 2023-02-18 00:35:33

1. oss上傳速度跟伺服器有關系嗎

以下代碼使用分片上傳的方式,可有效解決,OSS文件上傳緩慢問題,但如果伺服器的寬頻過低還是會影響上傳速度,可將伺服器寬頻提高,以提升速度
1.引入POM

<!--阿里雲OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.9.1</version>
</dependency>

1
2
3
4
5
6
7
1
2
3
4
5
6
7
2.編寫文件上傳工具類

import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;

import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
* 文件上傳工具類
*/
public class FilesUploadUtil {

/**
* 獲取上傳結果
* @param newFile 上傳文件
* @param folder 父級文件夾名稱
* @return 文件訪問路徑
*/
public static JSONObject obtainTheFileUploadResult(MultipartFile newFile, String folder){
JSONObject result=new JSONObject();
JSONObject data=new JSONObject();
long startTime = System.currentTimeMillis();
try {

// MultipartFile 轉 File
File file=multipartFileToFile(newFile);
//上傳文件
String[] resultArr = uploadObject2OSS(file, folder);
if (resultArr != null) {
String path = resultArr[1];
//絕對路徑,拼接CND加速域名,或自己的域名
data.put("src", "自己的公網IP".concat("/").concat(path));
//相對路徑
data.put("relativePath", path);
result.put("msg", 1);
result.put("errorMessage", null);
}
// 刪除本地臨時文件
deleteTempFile(file);
} catch (RuntimeException e) {
e.printStackTrace();
result.put("msg", 0);
result.put("errorMessage", "文件大小不能超過9.7G");
data.put("src", null);
data.put("relativePath", null);
}catch (Exception e) {
result.put("msg", 0);
result.put("errorMessage", "上傳錯誤:"+e.getMessage());
data.put("src", null);
data.put("relativePath", null);
}
result.put("data",data);
long endTime = System.currentTimeMillis();
System.out.println("------文件上傳成功,耗時" + ((endTime - startTime) / 1000) + "s------");
return result;
}

/**
* 上傳圖片至OSS 文件流
*
* @param file 上傳文件(文件全路徑如:D:\\image\\cake.jpg)
* @param folder 阿里雲API的文件夾名稱(父文件夾)
* @return String 返回的唯一MD5數字簽名
*/
public static String[] uploadObject2OSS(File file,String folder) throws Exception{
//獲取OSS客戶端對象
OSS ossClient=getOSSClient();
//OOS 桶名稱 bucketName
String bucketName="自己阿里雲的bucketName";
// 阿里OSS
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
// 阿里雲API的文件夾名稱(子文件夾)
String format = dateFormat.format(date) + "/";
// 文件名
String formats =String.valueOf(UUID.randomUUID());
// 創建一個可重用固定線程數的線程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
String[] resultArr = new String[2];
try {
// 分片上傳
folder =folder +"/"+ format;
// 文件名
String fileName = file.getName();
// 文件擴展名
String fileExtension = fileName.substring(fileName.lastIndexOf("."));
// 最終文件名:UUID + 文件擴展名
fileName = formats + fileExtension;
// 上傳路徑 如:appversion/20200723/a3662009-897c-43ea-a6d8-466ab8310c6b.apk
// objectName表示上傳文件到OSS時需要指定包含文件後綴在內的完整路徑,例如abc/efg/123.jpg
String objectName = folder + fileName;
System.out.println("文件路徑--》》"+objectName);
// 文件大小
long fileSize = file.length();
// 創建上傳Object的Metadata
ObjectMetadata metadata = new ObjectMetadata();
// 指定該Object被下載時的網頁的緩存行為
metadata.setCacheControl("no-cache");
// 指定該Object下設置Header
metadata.setHeader("Pragma", "no-cache");
// 指定該Object被下載時的內容編碼格式
metadata.setContentEncoding("utf-8");
// 文件的MIME,定義文件的類型及網頁編碼,決定瀏覽器將以什麼形式、什麼編碼讀取文件。如果用戶沒有指定則根據Key或文件名的擴展名生成,
// 如果沒有擴展名則填默認值application/octet-stream
metadata.setContentType(getContentType(fileExtension));
// 指定該Object被下載時的名稱(指示MINME用戶代理如何顯示附加的文件,打開或下載,及文件名稱)
metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
// 創建對象
request = new (bucketName, objectName, metadata);
// 初始化分片
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
// 返回uploadId,它是分片上傳事件的唯一標識,您可以根據這個uploadId發起相關的操作,如取消分片上傳、查詢分片上傳等
String uploadId = upresult.getUploadId();
// partETags是PartETag的集合。PartETag由分片的ETag和分片號組成
List<PartETag> partETags = Collections.synchronizedList(new ArrayList<>());
// 計算文件有多少個分片
final long partSize = 1 * 1024 * 1024L; // 1MB
long fileLength = file.length();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
}
if (partCount > 10000) {
throw new RuntimeException("文件過大");
}
// 遍歷分片上傳
for (int i = 0; i < partCount; i++) {
long startPos = i * partSize;
long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
int partNumber = i + 1;
// 實現並啟動線程
executorService.execute(new Runnable() {
@Override
public void run() {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
// 跳過已經上傳的分片
inputStream.skip(startPos);
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(bucketName);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(uploadId);
uploadPartRequest.setInputStream(inputStream);
// 設置分片大小。除了最後一個分片沒有大小限制,其他的分片最小為100 KB。
uploadPartRequest.setPartSize(curPartSize);
// 設置分片號。每一個上傳的分片都有一個分片號,取值范圍是1~10000,如果超出這個范圍,OSS將返回InvalidArgument的錯誤碼。
uploadPartRequest.setPartNumber(partNumber);
// 每個分片不需要按順序上傳,甚至可以在不同客戶端上傳,OSS會按照分片號排序組成完整的文件。
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
//每次上傳分片之後,OSS的返回結果會包含一個PartETag。PartETag將被保存到PartETags中。
synchronized (partETags) {
partETags.add(uploadPartResult.getPartETag());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
});
}
// 等待所有的分片完成
// shutdown方法:通知各個任務(Runnable)的運行結束
executorService.shutdown();
while (!executorService.isTerminated()) {
try {
// 指定的時間內所有的任務都結束的時候,返回true,反之返回false,返回false還有執行完的任務
executorService.awaitTermination(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
// 立即關閉所有執行中的線程
// executorService.shutdownNow();

// 驗證是否所有的分片都完成
if (partETags.size() != partCount) {
throw new IllegalStateException("文件的某些部分上傳失敗!");
}
// 完成分片上傳 進行排序。partETags必須按分片號升序排列
Collections.sort(partETags, new Comparator<PartETag>() {
@Override
public int compare(PartETag o1, PartETag o2) {
return o1.getPartNumber() - o2.getPartNumber();
}
});
// 創建對象
// 在執行完成分片上傳操作時,需要提供所有有效的partETags。OSS收到提交的partETags後,會逐一驗證每個分片的有效性。當所有的數據分片驗證通過後,OSS將把這些分片組合成一個完整的文件
= new (bucketName, objectName, uploadId, partETags);
// 設置文件訪問許可權
// .setObjectACL(CannedAccessControlList.PublicRead);
// 完成上傳
CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload();
if (completeMultipartUploadResult != null) {
// 解析結果
resultArr[0] = completeMultipartUploadResult.getETag();
resultArr[1] = objectName;
return resultArr;
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("上傳阿里雲OSS伺服器異常." + e.getMessage());
} finally {
// 關閉OSSClient
ossClient.shutdown();
}
return null;
}

/**
* MultipartFile 轉 File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) {
try {
File toFile;
if (file != null && file.getSize() > 0) {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
return toFile;
}
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

/**
* 獲取流文件
*
* @param ins
* @param file
*/
public static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 獲取阿里雲OSS客戶端對象
*
* @return ossClient
*/
public static OSS getOSSClient() {
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
// 連接空閑超時時間,超時則關閉
conf.setIdleConnectionTime(1000);

return new OSSClientBuilder().build("自己阿里雲的endpoint", "自己阿里雲的access_key_id", "自己阿里雲的access_key_secret", conf);
}

/**
* 獲得url鏈接
*
* @param bucketName 桶名稱
* @param key Bucket下的文件的路徑名+文件名 如:"appversion/20200723/a3662009-897c-43ea-a6d8-466ab8310c6b.apk"
* @return 圖片鏈接:http://xxxxx.oss-cn-beijing.aliyuncs.com/test/headImage/1546404670068899.jpg?Expires=1861774699&OSSAccessKeyId=****=p%2BuzEEp%2F3JzcHzm%2FtAYA9U5JM4I%3D
* (Expires=1861774699&OSSAccessKeyId=LTAISWCu15mkrjRw&Signature=p%2BuzEEp%2F3JzcHzm%2FtAYA9U5JM4I%3D 分別為:有前期、keyID、簽名)
*/
public static String getUrl(String bucketName, String key) {
// 設置URL過期時間為10年 3600L*1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
OSS ossClient = getOSSClient();
// 生成URL
URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
return url.toString().substring(0, url.toString().lastIndexOf("?"));
}

/**
* 刪除本地臨時文件
*
* @param file
*/
public static void deleteTempFile(File file) {
if (file != null) {
File del = new File(file.toURI());
del.delete();
}
}

/**
* 通過文件名判斷並獲取OSS服務文件上傳時文件的contentType
*
* @param fileExtension 文件名擴展名
* @return 文件的contentType
*/
public static String getContentType(String fileExtension) {
// 文件的後綴名
if (".bmp".equalsIgnoreCase(fileExtension)) {
return "image/bmp";
}
if (".gif".equalsIgnoreCase(fileExtension)) {
return "image/gif";
}
if (".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension)
|| ".png".equalsIgnoreCase(fileExtension)) {
return "image/jpeg";
}
if (".html".equalsIgnoreCase(fileExtension)) {
return "text/html";
}
if (".txt".equalsIgnoreCase(fileExtension)) {
return "text/plain";
}
if (".vsd".equalsIgnoreCase(fileExtension)) {
return "application/vnd.visio";
}
if (".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {
return "application/vnd.ms-powerpoint";
}
if (".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {
return "application/msword";
}
if (".xml".equalsIgnoreCase(fileExtension)) {
return "text/xml";
}
if (".mp4".equalsIgnoreCase(fileExtension)) {
return "video/mp4";
}
// android
if (".apk".equalsIgnoreCase(fileExtension)) {
return "application/vnd.android.package-archive";
}
// ios
if (".ipa".equals(fileExtension)) {
return "application/vnd.iphone";
}
// 默認返回類型
return "application/octet-stream";
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
3.controller編寫

/**
* 上傳文件
*
* @param file 文件
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/urevf", method = RequestMethod.POST, proces = "application/json;charset=UTF-8")
public JSONObject uploadRealEstateVideoFiles(@RequestParam(value = "file") MultipartFile file) throws IOException {
//此處的video_file為阿里雲OSS上最外層文件夾,自己新建即可
return FilesUploadUtil.obtainTheFileUploadResult(file, "video_file");
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14

2. Android圖片上傳到阿里雲OSS小案例

1.在管理控制台找到OOS並開通
2.點擊存儲空間,創建bucket

1、 Android SDK開發包
Android Studio方式(推薦) Maven依賴

2、許可權設置
在 AndroidManifest.xml 文件中已經配置了這些許可權,否則,SDK 將無法正常工作。

3.混淆設置
修改 項目名app[proguard-rules.pro ]路徑下的proguard-rules.pro文件

4.寫工具類
(1)首先要有4個數據
END_POINT 、BUCKET_NAME 、Access Key ID、Access Key Secret
創建你的Access Key 然後將需要的值復制粘貼到工具類對應位置

(2)寫工具類,UploadHelper

(按鈕點擊上傳一張圖片,因為測試,我就把圖片路徑寫死了)
1、寫一個leyout

2.對應的Java類

3、結果驗證

看到如上結果,那恭喜你大功告成了。
[ps]有的人可能有個地方會報錯,當然不能原原本本的抄了

這里要換成你自己的全局Application Content,

另外,一個HashUtil.java

本文鏈接: https://blog.csdn.net/qq_37971615/article/details/81975465

3. oss-browser如何批量替換內容

批量上傳
您可以使用以下方法,批量上傳文件:
ossimport工具
支持從伺服器本地、第三方雲存儲(S3、Azure、騰訊COS等)、OSS等數據源將數據批量遷移到OSS,特別適合數據量很大的情況。詳情請參見說明及配置。
ossutil工具
使用ossutil工具的cp命令,結合-r(--recursive)選項,可批量上傳文件到OSS。詳情請參見上傳文件。
ossbrowser工具
使用ossbrowser工具批量選中文件後上傳到OSS。詳情請參見上傳文件。
OSS控制台
使用OSS控制台批量選中文件後上傳到OSS。詳情請參見上傳文件。
批量下載
您可以使用以下方法,批量下載文件:
ossutil工具
使用ossutil工具的cp命令,結合-r(--recursive)選項,將指定文件目錄內的文件批量下載到本地。詳情請參見下載文件。
ossbrowser工具
使用ossbrowser工具勾選多個文件或文件目錄,將文件或文件目錄批量下載到本地。詳情請參見下載文件。
OSS控制台
使用OSS控制台勾選多個文件,將文件批量下載到本地。詳情請參見下載文件。
文件打包後下載
結合函數計算服務,您可以將批量文件打包後下載到本地。詳情請參見使用函數計算打包下載OSS文件。
批量復制
您可以使用以下方法,批量復制文件:
跨區域復制
通過跨區域復制可以對指定前綴文件進行批量復制。您還可以選擇是否同步歷史數據、是否同步刪除操作。詳情請參見設置跨區域復制。
ossutil工具
使用ossutil工具的cp命令,結合-r(--recursive)選項,將指定文件目錄內的文件批量復制到另一個文件目錄或同賬號下的另一個存儲空間內。詳情請參見復制文件。
ossbrowser工具
使用ossbrowser工具勾選多個文件夾或文件,將一個或多個文件復制到另一個文件目錄或同賬號下另一個存儲空間內。詳情請參見復制文件。
批量刪除
您可以使用以下方法,批量刪除文件:
警告 文件刪除後不可恢復,請謹慎操作。
OSS SDK
使用SDK批量刪除文件。
Java SDK
python SDK
Go SDK
C++ SDK
更多語言的SDK示例請參見SDK 參考。
OSS API
通過OSS的DeleteMultipleObjects介面可批量刪除文件。詳情請參見DeleteMultipleObjects。
ossutil工具
使用ossutil的rm命令,結合-r(--recursive)選項,將指定前綴的文件批量刪除。詳情請參見刪除文件。
ossbrowser工具
使用ossbrowser工具勾選多個文件或文件目錄,批量刪除。詳情請參見刪除文件。
OSS控制台
使用OSS控制台勾選多個文件,批量刪除。詳情請參見刪除文件。
您也可以直接刪除某個文件目錄,文件目錄內的文件會同時被刪除。
使用OSS控制台的碎片管理功能,批量刪除碎片。詳情請參見管理碎片。
生命周期規則
通過生命周期規則批量自動刪除您的文件。詳情請參見生命周期規則介紹。
批量修改文件存儲類型
您可以使用以下方法,批量修改文件的存儲類型:
ossutil工具
使用ossutil的set-meta命令,結合-r(--recursive)選項,批量修改指定文件的存儲類型。詳情請參見set-meta。
生命周期規則
通過生命周期規則批量自動修改文件的存儲類型。詳情請參見生命周期規則介紹。
批量修改文件訪問許可權(ACL)
您可以通過ossutil工具批量修改文件ACL:
使用set-acl命令,結合-r(--recursive)選項,批量修改指定文件的ACL。詳情請參見set-acl。
使用set-meta命令結合-r(--recursive)選項,通過修改指定文件的meta信息來修改文件的ACL。詳情請參見set-meta。
批量解凍文件
您可以使用以下方法,批量將歸檔存儲「冷凍」狀態的文件恢復為可讀:
ossutil工具
使用restore命令,結合-r(--recursive)選項,批量恢復冷凍狀態的文件為可讀狀態。詳情請參見restore。
ossbrowser工具
使用ossbrowser工具勾選需要解凍的文件,批量解凍。
批量設置文件Meta信息
您可以使用以下方法,批量修改文件的Meta信息:
ossutil工具
使用ossutil的set-meta命令,結合-r(--recursive)選項,批量修改指定文件的meta信息。詳情請參見set-meta。
此命令可用於批量修改文件的存儲類型及文件訪問許可權。
OSS控制台
在控制台上勾選需要修改Http head信息的文件,批量設置文件的Meta信息。詳情請參見設置文件HTTP頭。
版權聲明:本文內容由阿里雲實名注冊用戶自發貢獻,版權歸原作者所有,阿里雲開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。

4. oss和ftp的區別

類型、作用。
1、類型。OSS是一款基於阿里雲OSS的FTPserver工具,FTP的文件是上傳到阿里雲OSS存儲伺服器。
2、作用。OSS作用是電信業務開展和運營時所必需的支撐平台,FTP的作用是用於文件的上傳和下載。

5. 直接訪問oss里的數據 怎麼不能訪問

沒有這樣的選項,不過阿里雲內網訪問OSS和外網訪問OSS確實有區別,就拿速度來說吧,OSS內網平均上下載50.55MB/s,外網則根據寬頻上下行速度而定,內網不會流量不會收費的,如果你怕外網多餘請求給你多花錢,那麼你不向外泄露你的PUB域名就行了。

6. teracloud傳不了大文件

teracloud傳不了超過5G大文件。傳大文件用以下方法解決
如果我們需要使用工具上傳單個或者多個大文件,而不是使用API、SDK編寫代碼上傳時,可以使用ossutil。

1、可以使用ossutil命令行工具的cp命令上傳大文件

2、可通過–bigfile-threshold 參數控制分片並發上傳的文件大小閾值

3、ossutil上傳單個或多個大文件時,可以通過-jobs項和-parallel項,控制並發,優化上傳性能。

若需要進行大批量的文件上傳到OSS,還可以使用工具ossimport。

分片斷點續傳

在使用SDK或API上傳大文件時,是可以使用分片斷點續傳方式的。分片上傳適用於以下場景:

1、單個文件的大小超過5GB

2、流式上傳:對文件大小還不確定的情況下,需開始上傳。

3、惡劣的網路環境,需要斷點續傳大文件。本身的網路環境差,或者是使用手機端,當出現上傳失敗的時候,可以對失敗的Part進行獨立的重試,而不需要重新上傳其他的Part。

4、加速上傳。上傳到OSS的本地文件很大時,可以採用並行上傳多個Part以加快上傳。

7. 如何將阿里雲OSS的海量文件傳輸到本地伺服器集群上。

1、Sync4oss的文件同步工具不走FTP協議,利用操作系統的監測機制,高效獲取磁碟文件變化情況,然後實時同步到OSS,直接從Sync4oss工具傳到OSS,無需中轉,性能效率高;

2、您的圖片不能顯示,我個人分析是你的配置不正確(軟體配置或者網站配置),和FTP應該是沒有關系的,因為FTP只是一個幫你把圖片傳到OSS的工具而已;(基於我們的FTP雲工具分析)

8. 如何快速安裝OSSFTP工具阿里雲OSS FTP安裝圖文詳細教程

OSSFTP工具是一個特殊FTPserver,它接收普通FTP請求後,將對文件、文件夾的操作映射為對OSS的操作,從而使得您可以基於FTP協議來管理存儲在OSS上的文件。

注意生產環境請使用osssdk,OSSFTP工具主要面向個人用戶使用。

主要特性

跨平台:

無論是Windows、Linux還是Mac,無論是32位還是64位操作系統,無論是圖形界面還是命令行都可以運行。

免安裝:

解壓後可直接運行。

免設置:

無需設置即可運行。

透明化:

FTP工具是python寫的,您可以看到完整的源碼,我們稍後也會開源到Github。

主要功能

支持文件和文件夾的上傳、下載、刪除等操作。

通過Multipart方式,分片上傳大文件。

支持大部分FTP指令,可以滿足日常FTP的使用需求。

注意

1.目前在1.0版本中,考慮到安裝部署的簡便,OSSFTP工具沒有支持TLS加密。由於FTP協議是明文傳輸的,

為了防止您的密碼泄漏,建議將FTPserver和client運行在同一台機器上,通過127.0.0.1:port的方式來訪問。

2.不支持rename和move操作。

3.安裝包解壓後的路徑不要含有中文。

4.FTPserver的管理控制頁面在低版本的IE中可能打不開。

5.FTPserver支持的Python版本:Python2.6,Python2.7。

下載

由於Windows不會默認安裝Python2.7,所以安裝包中包含了Python2.7,免去您python安裝配置的麻煩,解壓即可使用。

由於Linux/Mac系統默認會安裝Python2.7或Python2.6,所以安裝包中不再包含可執行的python,只包含了相關依賴庫。

運行

首先解壓之前下載的文件,然後根據環境情況選擇不同的運行方式。

Windows:雙擊運行start.vbs即可

Linux:打開終端,運行 i.$bashstart.sh

Mac:雙擊start.command,或者在終端運行 i.$bashstart.command

上述步驟會啟動一個FTPserver,默認監聽在127.0.0.1的2048埠。同時,為了方便您對FTPserver的狀態進行管控,還會啟動一個web伺服器,監聽在127.0.0.1的8192埠。如果您的系統有圖形界面,還會自動打開控制頁面,

如下所示:

大部分情況不要任何配置,就可以運行一個FTPserver了,如果想對FTPserver進行配置,請注意需要重啟才能生效。

連接到FTPserver推薦使用FileZilla客戶端去連接FTPserver。

下載安裝後,按如下方式連接即可:

主機:127.0.0.1

登錄類型:正常

用戶:access_key_id/bucket_name

密碼:access_key_secret

注意:

用戶中,/是必須的,如用戶

tSxyiUM3NKswPMEp/test-hz-jh-002。

-access_key_id和access_key_secret的獲取

高級使用

通過控制頁面管理FTPserver

修改監聽地址

如果需要通過網路來訪問FTPserver,那麼需要修改監聽地址,因為默認的監聽地址127.0.0.1隻允許來自本地的訪問。可以修改成內網ip或公網ip。

修改監聽埠

修改FTPserver監聽的埠,建議埠大於1024,因為監聽1024以下的埠時需要管理員許可權.

修改日誌等級

設置FTPserver的日誌級別。FTPserver的日誌會輸出到data/ossftp/目錄下,可以通過控制頁面的日誌按鈕在線查看。默認的日誌界別為INFO,列印的日誌信息較少,如果需要更詳細的日誌信息,可以修改為DEBUG模式。如果希望減少日誌的輸出,可以設置級別為WARNING或ERROR等。

設置Bucketendpoints

FTPserver默認會探索bucket的所屬location信息,隨後將請求發到對應的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTPserver會優先嘗試內網訪問oss。如果您設置了bucketendpoints,如設置為test-bucket-a.oss-cn-hangzhou.aliyuncs.com,那麼當訪問test-bucket-a時,就會使用oss-cn-hangzhou.aliyuncs.com域名。

注意

所有修改都需要重啟才能生效。

上述的所有修改其實都是修改的ftp根目錄下的config.json,所以您可以直接修改該文件。

直接啟動FTPserver(Linux/Mac)

可以直接啟動ossftp目錄下的ftpserver.py,免去web_server的開銷。

1.python ossftp/ftpserver.py

配置修改方式同上。

可能遇到的問題

如果連接FTPserver時,遇到以下錯誤:

有兩種可能:

輸入的access_key_id和access_key_secret有誤。

解決 :請輸入正確的信息後再重試。

所用的access_key信息為ram子賬戶的access_key,而子賬戶不具有Listbuckets許可權。

解決 :當使用子賬戶訪問時,請在控制頁面中指定bucketendpoints,即告訴FTPserver某個bucket應該用什麼endpoint來訪問。同時,子賬戶也需要一些必須的許可權,關於使用ram訪問oss時的訪問控制。

只讀訪問

OSSFTP工具需要的許可權列表為ListObjects、GetObject、HeadObject。關於如何創建一個具有隻讀訪問的ram子賬戶,請參考圖文教程如何結合ram實現文件共享。

上傳文件

如果允許ram子賬戶上傳文件,還需要PutObject。

刪除文件

如果允許ram子賬戶刪除文件,還需要DeleteObject。

如果您在Linux下運行FTPserver,然後用FileZilla連接時遇到如下錯誤:

501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)

一般是因為本地的中文編碼有問題。在將要運行start.sh的終端中輸入下面的命令,然後再重新啟動即可。

1 .$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale

9. 商城圖片更換為oss

在網站未接入阿里雲OSS儲存時,我們編寫文章上傳圖片都是上傳到伺服器本地的。文章量少還好,一旦文章量大了,圖片附件也會非常大,定期備份網站,備份包就很大。如果你使用的ZBlog PHP建站,想要採用阿里雲OSS儲存圖片,則可以參考文章《ZBlog PHP插件阿里雲OSS - Free 文章附件圖片自動上傳》使用插件即可。但是今天要說的是,如果以前是使用的本地圖片,現在接入了阿里雲OSS圖片儲存,要如何將以前的圖片上傳到阿里雲OSS中,並且在文章中使用該圖片。想知道話,就繼續往下看吧。

二、准備

1、ossbrowser瀏覽器 軟體(阿里雲官方提供的OSS瀏覽器)

下載地址:https://help.aliyun.com/document_detail/61872.html

2、Navicat Premium 12 資料庫連接工具

下載地址:https://www.zjh336.cn/?id=270

三、聲明

操作不當可能會造成文件丟失或者圖片顯示不出來,建議事先備份網站和資料庫

四、開始

1、獲取網站附件上傳路徑,可以直接打開遠程伺服器,也可以使用其他工具



2、打開OSS Browser工具,連接上你的空間



3、參考第一步驟中的路徑,在OSS中創建相同的目錄



4、將第一步驟中的圖片,拖拽上傳到OSS新建的目錄下

5、打開Navicat連接工具,連接到網站資料庫



6、獲取OSS文件的訪問路徑

以本站為例,使用的https://www.zjh336.cn/zb_users 也可使用OSS的外網訪問地址,具體可從阿里雲OSS控制台中獲取

或者參考文章https://www.zjh336.cn/?id=21

7、執行sql 其中第二個參數,替換為對應的訪問地址即可

SQL
update `zbp_post`
set log_Content=
REPLACE(log_Content,'https://www.zjh336.cn/zb_users','https://www.zjh336.cn/zb_users'),
log_Meta=
REPLACE(log_Meta,'https://www.zjh336.cn/zb_users','https://www.zjh336.cn/zb_users')


8、查看文章,圖片正常訪問,地址已替換



9、接下來就可以刪除upload下的圖片內容了,至此大功告成

10. 請教阿里雲 OSS 使用方法

開始使用阿里雲 OSS
阿里雲 OSS(Object Storage Service)為您提供基於網路的數據存取服務。使用 OSS,您可以通過網路隨時存儲和調用包括文本、圖片、音頻和視頻等在內的各種結構化或非結構化數據文件。
在使用阿里雲 OSS 之前,您需要了解 OSS 的幾個基本概念。阿里雲 OSS 將數據文件以對象(object)的形式上傳到存儲空間(bucket)中。 您可以創建一個或者多個存儲空間,然後向每個存儲空間中添加一個或多個文件。您可以通過獲取已上傳文件的地址進行文件的分享和下載。您還可以通過修改存儲空間或文件的屬性或元信息來設置相應的訪問許可權。
您可以通過阿里雲管理控制台執行基本和高級 OSS 任務,您還可以通過阿里雲開發工具包或直接在應用程序中進行 RESTful API 調用執行基本和高級 OSS 任務。有關更多信息,請參見 阿里雲 OSS 開發人員指南。
本文檔將向您介紹如何使用阿里雲管理控制台來完成以下基本任務。

開通 OSS 服務
創建存儲空間
上傳文件
分享文件
刪除文件
刪除存儲空間
有關阿里雲 OSS 功能和定價的相關信息,請參見阿里雲 OSS 產品頁。
https://help.aliyun.com/document_detail/31883.html?spm=5176.7933691.203455.1.XuguE7

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:711
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:973
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:684
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:836
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:742
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1084
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:313
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:193
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:881
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:839