如何限制上传文件的大小apache + django

时间:2010-05-24 05:26:31

标签: python django apache

如何限制上传文件的大小。 我正在使用带有apache的django 1.1。 我可以使用apache并显示一些html错误页面,如果说大小超过100MB。

感谢。

4 个答案:

答案 0 :(得分:4)

  

我的意思是在上传文件之前

在客户端,这是不可能的......

我建议您撰写custom upload handlers并覆盖receive_data_chunk

示例:QuotaUploadHandler

答案 1 :(得分:1)

您可以使用文件API在最近的浏览器中使用javascript执行此操作:http://www.w3.org/TR/FileAPI/

例如(使用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

}

不需要Java或Flash。当然,对于禁用javascript的用户,您仍需要对服务器进行某种检查。

答案 2 :(得分:0)

apache具有最大文件大小的服务器设置..(也不要忘记最大帖子大小)。我不相信apache可以自己显示错误页面,你可以使用python。  不幸的是,我对蟒蛇(但是)一无所知,所以除此之外我无法真正帮助你。 我知道php可以很容易地做到这一点所以我确定有一个python的方法。

答案 3 :(得分:0)

如果您想在上传开始前获取文件大小,则需要使用Flash或Java小程序。

编写自定义上传处理程序是最好的方法。我认为以下内容可行(未经测试)。它会尽早终止上传。

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)