2010-11-13 97 views
0

我想將一些文件從表單上傳到雲服務器而不用重定向到那裏。所以我發現this教程使用php/ajax,但沒有在django中使用的函數在那裏使用 - move_uploaded_file。我怎樣才能達到與Django相同?目前我使用Django的filetransfers的一部分,但省略提交我的形式if request.method == POST後的整個部分後:move_uploaded_file在django中的等效函數

def upload_handler(request):    
    if request.method == 'POST': 
     form = ArtifactSubmissionForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
     return HttpResponseRedirect('/') 
    else:  
     upload_url, upload_data = prepare_upload(request, "uploadlink") 
     form = ArtifactSubmissionForm()  

    myfileid = create_myfileid() 
    return direct_to_template(request, 'rte/artifact_inline.html', 
     {'upload_url': upload_url, 
     'form': form, 
     'upload_data': upload_data, 
     'myfileid': myfileid, 
     'artifact': artifact, 
     'submissions': submissions}) 

和HTML:

{% load filetransfers %} 

{% block artifact %} 
<h1>Submit</h1> 
<form action="{{ upload_url }}" method="POST" enctype="multipart/form-data"> 
    {% render_upload_data upload_data %} 
    <table>{{ form }}</table>  
    <p> 
     <input type="hidden" maxlength="64" name="myfileid" value="{{ myfileid }}" > 
    </p> 
    <p> 
     <input type="submit" value="Submit" /> 
    </p> 
</form> 
{% endblock %} 

編輯:

我只需要將文件發送到服務器進行進一步處理,然後從服務器響應中讀取它們的URL。不需要將它們用作File對象。

+0

乍看之下,PHP教程只是移動接收它們的服務器上的文件。這可能對你正在嘗試做的事沒有用。 – 2010-11-13 20:28:37

回答

0

django-storages插件具有允許您自動將上傳內容存儲到您選擇的存儲庫的功能。它有一個煩人的需要鏈接到你的MEDIA_URL,但這只是代碼,你可以解決它。

源代碼可以在這裏找到:Django storages

我建議圍繞網絡尋找一個你喜歡的。如果您正在使用Amazon Cloudfront,就像我在當前位置所做的那樣,使用通過簽名URL解散HTTPS的解決方案爲我們節省了幾毫秒的下載時間,而且這種下載會隨着時間的推移累積起來。

+0

我沒有使用S3。另外django-storages只允許通過ftp發送文件 - 小文件。猜猜我需要從頭開始編寫它。 – decarbo 2010-11-14 20:31:18

+0

如果文件非常大,則存在兩個問題:一致性和響應時間。在這樣的情況下,我會(1)有一個替代服務器除了處理文件傳輸外什麼也不做,(2)與芹菜或齒輪人員一起發起任務,將數據傳輸到最終的存儲庫。 – 2010-11-16 16:37:42