how to stream file to client in django

前端 未结 2 1624
孤城傲影
孤城傲影 2021-01-07 02:13

I want to know how can I stream data to client using django.

The Goal

The user submits a form, the form data is passed to a web service whi

相关标签:
2条回答
  • 2021-01-07 02:53

    You can create a django file instance of ContentFile using a string content instead of actual file and then send it as a response.

    Sample code:

    from django.core.files.base import ContentFile
    def your_view(request):
        #your view code
        string_to_return = get_the_string() # get the string you want to return.
        file_to_send = ContentFile(string_to_return)
        response     = HttpResponse(file_to_send,'application/x-gzip')
        response['Content-Length']      = file_to_send.size    
        response['Content-Disposition'] = 'attachment; filename="somefile.tar.gz"'
        return response   
    
    0 讨论(0)
  • 2021-01-07 02:55

    You can modify send_zipfile from the snippet to suit your needs. Just use StringIO to turn your string into a file-like object which can be passed to FileWrapper.

    import StringIO, tempfile, zipfile
    ...
    # get your string from the webservice
    string = webservice.get_response() 
    ...
    temp = tempfile.TemporaryFile()
    
    # this creates a zip, not a tarball
    archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
    
    # this converts your string into a filelike object
    fstring = StringIO.StringIO(string)   
    
    # writes the "file" to the zip archive
    archive.write(fstring)
    archive.close()
    
    wrapper = FileWrapper(temp)
    response = HttpResponse(wrapper, content_type='application/zip')
    response['Content-Disposition'] = 'attachment; filename=test.zip'
    response['Content-Length'] = temp.tell()
    temp.seek(0)
    return response
    
    0 讨论(0)
提交回复
热议问题