我主持的Rackspace公司的雲文件的一些視頻文件,並允許每個用戶下載分配給他們的文件。允許用戶下載文件沒有透露鏈接,沒有緩衝
由於文件的大小是不可行緩衝在網絡服務器(webfaction)對象
我試圖重定向到文件中,與設置爲附接內容處置,但沒有成功。
我有什麼樣的選擇,如果有的話?
理想情況下,文件下載將彈出從我的網域點擊指向類似example.com/video/42/download/這樣我就可以處理身份驗證ECT中的鏈接後。但我不知道如何構建我的觀點,以實現這一點。
我主持的Rackspace公司的雲文件的一些視頻文件,並允許每個用戶下載分配給他們的文件。允許用戶下載文件沒有透露鏈接,沒有緩衝
由於文件的大小是不可行緩衝在網絡服務器(webfaction)對象
我試圖重定向到文件中,與設置爲附接內容處置,但沒有成功。
我有什麼樣的選擇,如果有的話?
理想情況下,文件下載將彈出從我的網域點擊指向類似example.com/video/42/download/這樣我就可以處理身份驗證ECT中的鏈接後。但我不知道如何構建我的觀點,以實現這一點。
你可能最好通過使用HttpResponseRedirect
除非有什麼我誤解服...?
# urls.py
from django.http import HttpResponseRedirect
url(r'^applications/(?P<id>\d+)/image\.png$', 'core.views.serve_image', name='image'),
這將服務於http://localhost/application/12345/image.png
的視圖。
# core/views.py
def serve_application_image(request, id):
# redirect to temp_url
application = Application.objects.get(id=id)
return HttpResponseRedirect(application.image.temp_url)
而這會將用戶擊中該URL重定向到Rackspace URL。它可以用於嵌入視頻,圖像等,在html <img>
標籤等。瀏覽器客戶端將能夠看到重定向的URL(在rackcdn.com上)。
我已經配置了我的應用程序以提供temp_url
屬性,該屬性在15分鐘後過期。臨時URL是在Rackspace.com爲CDN創建的,它們的文檔可能超出了這個問題的範圍,所以我現在就放棄它......但是我使用子代碼ImageField
的代碼來提供圖像屬性與.temp_url
代碼如下:
import hmac
from hashlib import sha1
from time import time
class ImageFieldFile_With_Temp_Url(ImageFieldFile):
@property
def temp_url(self):
container_name, file_name = (self.storage.container.name, self.name)
key = settings.CUMULUS['CUSTOM__X_ACCOUNT_META_TEMP_URL_KEY']
public_url = settings.CUMULUS['CUSTOM__X_STORAGE_URL']
method = 'GET'
expires = int(time() + settings.CUMULUS['CUSTOM__X_TEMP_URL_TIMEOUT'])
url = '%s/%s/%s' % (public_url, container_name, file_name)
base_url, object_path = url.split('/v1/')
object_path = '/v1/' + object_path
hmac_body = '%s\n%s\n%s' % (method, expires, object_path)
sig = hmac.new(key, hmac_body, sha1).hexdigest()
return '%s%s?temp_url_sig=%s&temp_url_expires=%s' % (base_url, object_path, sig, expires)
class ImageField_With_Temp_Url(models.ImageField):
attr_class = ImageFieldFile_With_Temp_Url
models.ImageField = ImageField_With_Temp_Url
請注意,我用這種方法的django-cumulus項目。
在models.py頂部的任意位置導入此函數將使用新的temp_url
屬性(因爲我將其分配給models.ImageField
...)延長了ImageField
。
我已經使用HttpRedirectResponse,但只是用戶直接重定向到rackcdn這是什麼樣的我想避免的鏈接。 – apr3ntice 2014-10-09 16:24:42
您可能可以使用'urllib'和'FileWrapper'的某種組合以8kb大小的方式進行流式傳輸。 http://blog.ekini.net/2010/10/15/file-streaming-in-django-sending-large-files-through-django/ – pztrick 2014-10-12 00:32:07