一. oss如果是商品圖片等公共文件,要設置成公共讀,其他情況設置成私有
二.
python flask框架上傳文件到oss
class UploadAtt(Resource): @jwt_required def post(self): file = request.files.get('file', None) parmat = request.form.get('param', None) if not file or file.filename == '': return func.resp(status=400, mess='文件不存在') filename = secure_filename(file.filename) if not func.allowed_file(filename): return func.resp(status=400, mess='文件格式不允許') # file.save(os.path.join(current_app.config['UPLOAD_FOLDER'], filename)) filename = func.gen_upload_filename(filename, parmat) if not filename: return func.resp(status=400, mess='參數錯誤') oss = FlaskOSS(current_app) oss.put_file(filename, file.read()) ret = {'filepath': func.get_oss_url_by_file(filename), 'filename': filename} return func.resp(ret, status=200, mess='File successfully uploaded')
python flask框架,授權預覽或下載私有文件, 圖片文件使用自定義域名可以預覽,其他文件默認下載
def get_oss_url_by_file(filename, expire=600): if not filename: return None if filename[0:1] == '/': filename = filename[1:] # 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。 auth = oss2.Auth(current_app.config['OSS_ACCESS_KEY_ID'], current_app.config['OSS_SECRET_ACCESS_KEY']) # Endpoint以杭州為例,其它Region請按實際情況填寫。 bucket = oss2.Bucket(auth, current_app.config['OSS_ENDPOINT_CNAME'], current_app.config['OSS_BUCKET_NAME'], True) # 設置此簽名URL在60秒內有效。 return bucket.sign_url('GET', filename, expire)
python flask框架下載文件到本地, 本地目錄我使用的當前文件夾下/download,要新建這個文件夾
# 下載文件 class OrderAtt(Resource): def get(self): filename = request.args.get('filepath', None) filetitle = request.args.get('filetitle', None) if not all([filename, filetitle]): return func.resp(status=400, mess="參數不能為空") if filename[0:1] == '/': filename = filename[1:] # 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。 auth = oss2.Auth(current_app.config['OSS_ACCESS_KEY_ID'], current_app.config['OSS_SECRET_ACCESS_KEY']) # Endpoint以杭州為例,其它Region請按實際情況填寫。 bucket = oss2.Bucket(auth, current_app.config['OSS_ENDPOINT_CNAME'], current_app.config['OSS_BUCKET_NAME'], True) # 下載OSS文件到本地文件。如果指定的本地文件存在會覆蓋,不存在則新建。 # <yourLocalFile>由本地文件路徑加文件名包括后綴組成,例如/users/local/myfile.txt。 # <yourObjectName>表示下載的OSS文件的完整名稱,即包含文件后綴在內的完整路徑,例如abc/efg/123.jpg。 directory = os.getcwd()+'/download/' # 假設在當前目錄 localfile = directory + filetitle bucket.get_object_to_file(filename, localfile) return func.resp()
python flask框架刪除文件
@jwt_required def delete(self): filename = request.args.get('filename', None) if not filename: return func.resp(status=400, mess='參數錯誤') oss = FlaskOSS(current_app) oss.del_file(filename) return func.resp()
三. php thinkphp上傳 預覽,
function getossurl($object){ if(!$object){ return null; } Vendor('aliyun-oss.autoload'); if(substr($object,0,1)=='/'){ $object = substr($object,1); } // 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄RAM控制台創建RAM賬號。 $accessKeyId = C("OSS_ACCESS_KEY_ID"); $accessKeySecret = C("OSS_SECRET_ACCESS_KEY"); // Endpoint以杭州為例,其它Region請按實際情況填寫。 $endpoint = C("OSS_ENDPOINT_CNAME"); $bucket= C("OSS_BUCKET_NAME"); // 設置URL的有效時長為3600s。 $timeout = 3600; try { $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, True); // 生成GetObject的簽名URL。 $signedUrl = $ossClient->signUrl($bucket, $object, $timeout); } catch (\OSS\Core\OssException $e) { // printf(__FUNCTION__ . ": FAILED\n"); // printf($e->getMessage() . "\n"); return null; } return $signedUrl; } function upload2oss($filePath,$object){ if(!$filePath){ return false; } Vendor('aliyun-oss.autoload'); if(substr($object,0,1)=='/'){ $object = substr($object,1); } // 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄RAM控制台創建RAM賬號。 $accessKeyId = C("OSS_ACCESS_KEY_ID"); $accessKeySecret = C("OSS_SECRET_ACCESS_KEY"); // Endpoint以杭州為例,其它Region請按實際情況填寫。 $endpoint = C("OSS_ENDPOINT"); $bucket= C("OSS_BUCKET_NAME"); try{ $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, $filePath); } catch(\OSS\Core\OssException $e) { // printf(__FUNCTION__ . ": FAILED\n"); // printf($e->getMessage() . "\n"); return false; } // print(__FUNCTION__ . ": OK" . "\n"); return true; }
問題:oss優化,app和pc都是ajax直接上傳到oss,如果上傳文件后返回或刪除文件或沒有提交,對應的文件也應該刪除.
處理方式, 1先上傳到oss tmp文件夾,並定時清理, 如果post請求成功,再拷貝到對應文件夾,這樣就節省服務器資源和oss費用 或者 先上傳到服務器的 tmp文件夾,並定時清理, 如果post請求成功,再上傳到oss中
2.tmp文件定時清理時間大於保持登錄的時間.refreshtoken或cookie或session到期時間. 這樣用戶添加后,到期必須重新登錄,就不用判斷文件是否存在.
cookie不設置到期時間或設置0,都是瀏覽器關閉就銷毀
cookie設置到期時間,默認保存在內存中或硬盤中,也可以保存到數據庫,到期時間之前關閉瀏覽器不會銷毀,重新打開還是已經登錄狀態.
session基於cookie,瀏覽器關閉sessionid就銷毀了,所以找不到對應的session了.