8

Django で Web アプリを作成しています。ファイルを views.py に送信するフォームがあります。

ビュー:

@login_required(login_url=login_url)
def addCancion(request):
    if request.method == 'POST':
        form2 = UploadSong(request.POST, request.FILES)
        if form2.is_valid():
            if(handle_uploaded_song(request.FILES['file'])):
                path = '%s' % (request.FILES['file'])
                ruta =  "http://domain.com/static/canciones/%s" % path
                usuario = Usuario.objects.get(pk=request.session['persona'])
                song = Cancion(autor=usuario, cancion=ruta)
                song.save()
                return HttpResponse(ruta)
            else:
                return HttpResponse("-3")
        else:
            return HttpResponse("-2")
    else:
        return HttpResponse("-1")   

MP3 ファイルだけをアップロードしようとしていますが、このフィルターの作成方法がわかりません。「ContentTypeRestrictedFileField(FileField):」という名前のクラスを試しましたが、機能しません。

views.pyでファイルタイプを取得するにはどうすればよいですか?

ありがとう!

4

7 に答える 7

16

また、検証に使用されるフォームから clean() メソッドを使用することもできます。したがって、mp3 以外のファイルを拒否できます。このようなもの:

class UploadSong(forms.Form):
    [...]

    def clean(self):
        cleaned_data = super(UploadSong, self).clean()
        file = cleaned_data.get('file')

        if file:
            filename = file.name
            print filename
            if filename.endswith('.mp3'):
                print 'File is a mp3'
            else:
                print 'File is NOT a mp3'
                raise forms.ValidationError("File is not a mp3. Please upload only mp3 files")

        return file
于 2013-10-09T14:20:53.567 に答える
5

リクエストを直接受け取るには:

import os


extesion = os.path.splitext(str(request.FILES['file_field']))[1]

またはdbで拡張機能を取得-モデル。

import os

file = FileModel.objects.get(pk=1)  # select your object
file_path = file.db_column.path  # db_column how you save name of file.

extension = os.path.splitext(file_path)[1]
于 2018-03-28T18:19:18.997 に答える
4

あなたはこれを意味します:

u_file = request.FILES['file']            
extension = u_file.split(".")[1].lower()

if(handle_uploaded_song(file)):
    path = '%s' % u_file
    ruta =  "http://example.com/static/canciones/%s" % path
    usuario = Usuario.objects.get(pk=request.session['persona'])
    song = Cancion(autor=usuario, cancion=ruta)
    song.save()
    return HttpResponse(content_type)
于 2013-04-12T16:57:57.797 に答える
1

FileType.pyライブラリを使用します。

kind = filetype.guess('tests/fixtures/sample.jpg')
if kind is None:
    print('Cannot guess file type!')
    return

print('File extension: %s' % kind.extension)
print('File MIME type: %s' % kind.mime)
于 2019-09-16T00:01:45.537 に答える