2017-06-22 73 views
0

我是個新手,上傳文件,在它的代碼,以便即時通訊相當糟糕。我使用Django作爲框架。目前這是我的用戶輸入html代碼。如何重新命名輸入文本

<html> 
<head> 
    <title>uploader</title> 
    <style> 
    h1 { 
     font-size: 2em; 
     font-weight: bold; 
     color: #777777; 
     text-align: center 
    } 
    table { 
     margin: auto; 
    } 
    a { 
     text-decoration: none 
} 
    </style> 
</head> 

<body> 

    <h1> 
     {{what}} 
     <h3><p style="text-align: left;text-decoration: none;"><a href="{% url 'home' %}">Back</p></a></h3> 
    </h1> 
<hr> 
    <table> 
    <tr> 
     <td> 
     <form action="upload/" method="POST" enctype="multipart/form-data"> 
{% csrf_token %} 
<fieldset> 
    Category of the device:<br> 
    <input type="text" name="category" value="" required id="cat"> 
    <br> 
    Model:<br> 
    <input type="text" name="model" value="" required id="mod"> 
<br> 
      <input type="submit" value="Upload File" class="submit" name="submit" /> 
<input type="file" name="file"/> 

</fieldset> 

     </form> 


     </td> 
    </tr> 
    </table> 

</body> 

</html> 

views.py

def home(request): 
    return render(request, 'index.html', {'what':'Upload Files'}) 


def upload(request): 
try: 
    if request.method == 'POST' and request.FILES['file']: 
     try:  
      myfile = request.FILES['file'] 
      category = request.POST['category'] 
      model = request.POST['model'] 
      validate_file_extension(myfile) 
      fs = FileSystemStorage(location='uploaded/') 
      filename = request.FILES['filename'].name 
      handle_uploaded_file(request.FILES['file'], str(request.FILES['file'])) 
      modified_name = "{}_{}_{}".format(filename, category, modle) 
      filename = fs.save(modified_name, myfile) 
      return redirect("/success") 
     except: 
      return redirect("/unsuccessful") 
except: 
    return redirect("/upload") 

def handle_uploaded_file(file, filename): 
    if not os.path.exists('uploaded/'): 
     os.mkdir('uploaded/') 
    with open('uploaded/' + filename, 'wb+') as destination: 
     for chunk in file.chunks(): 
      destination.write(chunk) 

我如何重命名上傳的用戶具有的文字,他們輸入自己的文件名後面用「_」的文件。

如:

filename = myfile 
category = camera 
model = XYZ123 

該文件應該被重新命名爲 「myfile_camera_XYZ123」。

+0

你必須做,在視圖中。你可以發佈嗎? –

+0

當然!我編輯過它 –

+0

與模型相關聯的形式? –

回答

0

首先獲取表單值,categorymodel。然後從上傳的文件中獲取文件名。

category = request.POST['category'] 
model = request.POST['model'] 

# And filename 
filename = request.FILES['filename'].name 


modified_name = "{}_{}_{}".format(filename, category, modle) 
filename = fs.save(modified_name, myfile) 
+0

我沒有得到你想說的,我試圖添加代碼,但它不工作。 –

+0

從窗體獲得cateogry和模型後。並使用request.FILES ['filename']獲取原始文件名。name –

+0

然後創建修改後的名稱字符串。你不明白這個...? –

0

這裏有一個更好的方法來處理Django窗體。

# forms.py 
from django import forms 

class UploadFileForm(forms.Form): 
    category = forms.CharField(max_length=100) 
    model = forms.CharField(max_length=100) 
    file = forms.FileField() 

# views.py 
def upload(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      data = form.cleaned_data 
      validate_file_extension(data.file) 
      file_ext = data.file.split(".")[-1] 
      file_core = data.file.replace('.'+file_ext, '') 
      filename = '{0}_{1}_{2}.{3}'.format(file_core, data.category, data.model, file_ext) 
      handle_uploaded_file(filename) 
      # ... fill the end 
+0

即使世界一個字典的錯誤,我不能在「file_ext = data.file.split(」。「) - 1]」 和當u說填補了年底,我該怎麼辦與節選?如果我改變它其他顯示語法錯誤 –

+0

forms.py固定,我的壞。應該會更好。根據您的項目不確定代碼是100%有效,但它給你的主要想法。 –

+0

對不起,延遲迴復,但在cmd它錯誤顯示:AttributeError:'字典'對象沒有屬性'文件' 這是否意味着什麼? –

相關問題