从请求发送到django app的url下载文件

问题描述 投票:2回答:2

在我的django应用程序中,我收到了一个JSON请求,如下所示:

{    
  "item1": false,
  "item2": false,
  "item3": "value",
  "url": "http://downloadlink.example.net"
}

我必须保存除url之外的所有数据,我只需要下载文本文件并将其保存在服务器上。我该怎么做下载部分?

代码在视图中:

class Collect(View):
@csrf_exempt
def dispatch(self, request, *args, **kwargs):
    return super(Collect, self).dispatch(request, *args, **kwargs)

def post(self, request):
    data = json.loads(request.body.decode())
    try:
        item1 = data["item1"]
        item2 = data["item2"]
        item3 = data["item3"]
        url = data["url"]
        new_row = ModelName(
            item1=item1,
            item2=item2,
            item3=item3,
        )
        new_row.save()
    except Error:
        return HttpResponse("Unable to save")

    return HttpResponse("Saved")
python django
2个回答
3
投票

所以基本上你可以使用urllib库,特别是它的urlretrieve函数首先将文件保存在temp文件夹中,然后你可以将它保存在你想要的任何地方。

import urllib
response = urllib.urlretrieve(url)
contents = open(response[0]).read()
f = open('filename.ext','w')
f.write(contents)
f.close()

这是如何从链接保存文件的基本示例。保存文件时,应包括完整路径,因此请确保在设置文件中创建BASE_DIR常量。您可以进一步在db中创建FileField或ImageField表,阅读here以获取更多示例。


0
投票

我认为最佳实践解决方案是使用celery,因为在用户等待时请求另一台服务器是不合适的并且延迟了用户,有时可能需要很长时间来处理更大的文件。你可以阅读docs了解更多。我强烈推荐它!

© www.soinside.com 2019 - 2024. All rights reserved.