[Django]-Simply save file to folder in Django

63๐Ÿ‘

Using default_storage is better than FileSystemStorage.

You can save file to MEDIA_ROOT with FileSystemStorage but when you change DEFAULT_FILE_STORAGE backend in the future this may not work anymore.

If you use default_storage, in the future if you want to use aws, azure etc as file store with multiple Django worker your code will work without any change.

default_storage usage example:

from django.core.files.storage import default_storage

#  Saving POST'ed file to storage
file = request.FILES['myfile']
file_name = default_storage.save(file.name, file)

#  Reading file from storage
file = default_storage.open(file_name)
file_url = default_storage.url(file_name)
๐Ÿ‘คMesut Tasci

24๐Ÿ‘

you can upload files to django server : :

from django.shortcuts import render
from django.conf import settings
from django.core.files.storage import FileSystemStorage

def upload(request):
    folder='my_folder/' 
    if request.method == 'POST' and request.FILES['myfile']:
        myfile = request.FILES['myfile']
        fs = FileSystemStorage(location=folder) #defaults to   MEDIA_ROOT  
        filename = fs.save(myfile.name, myfile)
        file_url = fs.url(filename)
        return render(request, 'upload.html', {
            'file_url': file_url
        })
    else:
         return render(request, 'upload.html')
๐Ÿ‘คbhawnesh dipu

12๐Ÿ‘

You can use django FileField, it support specify a upload_to parameter, like this:

data_file = models.FileField(upload_to=content_path)

Where content_path can be a string or a function which returns a string.

๐Ÿ‘คWKPlus

2๐Ÿ‘

Use the following code to update a FileField or ImageField. Django will upload the file to settings.MEDIA_ROOT per default.

from os.path import basename
from django.core.files import File
self.model.file_field.save(basename(path), content=File(open(path, 'rb')))

Afterwords you can access:

The path like this:

self.model.file_field.path

The url like this:

self.model.file_field.url
๐Ÿ‘คTobias Ernst

Leave a comment