How to restrict the size of file being uploaded apache + django

后端 未结 4 1938
北荒
北荒 2021-01-17 00:49

How to restrict the size of file being uploaded. I am using django 1.1 with apache. Can I use apache for this and show some html error page if say size is bigger then 100MB.

相关标签:
4条回答
  • 2021-01-17 00:59

    I mean before uploading the file

    On client side it isn't possible...

    I suggest to write a custom upload handlers and to override receive_data_chunk.

    Example: QuotaUploadHandler

    0 讨论(0)
  • 2021-01-17 01:09

    If you want to get the file size before uploading begins you will need to use Flash or a Java applet.

    Writing a custom upload handler is the best approach. I think something like the following would work (untested). It terminates the upload as early as possible.

    from django.conf import settings
    from django.core.files.uploadhandler import FileUploadHandler, StopUpload
    
    class MaxSizeUploadHandler(FileUploadHandler):
        """
        This test upload handler terminates the connection for 
        files bigger than settings.MAX_UPLOAD_SIZE
        """
    
        def __init__(self, request=None):
            super(MaxSizeUploadHandler, self).__init__(request)
    
    
        def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None):
            if content_length > settings.MAX_UPLOAD_SIZE:
                raise StopUpload(connection_reset=True)
    
    0 讨论(0)
  • 2021-01-17 01:12

    apache has a server setting for max file size..(also dont forget max post size). I do not believe apache can show an error page on its own, you can probably use python for that. unfortunetly I know nothing obout python (yet) so I can't really help you beyond that. I know php can do that easily so I'm sure there is a method for python.

    0 讨论(0)
  • 2021-01-17 01:19

    You can do this in javascript in most recent browsers, using the File API: http://www.w3.org/TR/FileAPI/

    For example (using jquery):

    var TYPES = ['image/jpeg', 'image/jpg', 'image.png'];
    
    var file = $('#my_file_input')[0].files[0];
    var size = file.size || file.fileSize;
    var type = file.type;
    
    if (size > MAX_BYTES) {
      alert('Error: file too large');
    
    } else if (TYPES.indexOf(type) < 0) {
      alert('Error: file not a JPG or PNG');
    
    } else {
      // proceed with file upload
    
    }
    

    No need for Java or Flash. Of course, you'll still need some sort of checking on the server for users who disable javascript.

    0 讨论(0)
提交回复
热议问题