【问题标题】:How to restrict the size of file being uploaded apache + django如何限制上传文件的大小 apache + django
【发布时间】:2011-02-23 02:34:29
【问题描述】:

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

谢谢。

【问题讨论】:

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

标签: python django apache


【解决方案1】:

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

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

我建议写一个custom upload handlers 并覆盖receive_data_chunk

示例:QuotaUploadHandler

【讨论】:

  • 2021年可以做这个客户端。
【解决方案2】:

您可以在最新浏览器中的 javascript 中使用 File API: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 的用户进行某种检查。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 好的,我可以在 apache 中使用 LimitRequestBody 来限制大小。但如果来自 django 的大小更大,可以找出显示错误页面。
    【解决方案4】:

    如果您想在开始上传之前获取文件大小,您需要使用 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)
    

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2022-10-26
      • 1970-01-01
      • 2013-10-19
      • 2022-12-21
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多