当前位置: 首页 > 面试题库 >

下载远程映像并将其保存到Django模型

洪涵亮
2023-03-14
问题内容

我正在编写Django应用程序,它将获取特定URL的所有图像并将其保存在数据库中。

但是我没有在Django中使用ImageField。

Settings.py

MEDIA_ROOT = os.path.join(PWD, "../downloads/")

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "htp://media.example.com/"
MEDIA_URL = '/downloads/'

models.py

class images_data(models.Model):
        image_id =models.IntegerField()
        source_id = models.IntegerField()
        image=models.ImageField(upload_to='images',null=True, blank=True)
        text_ind=models.NullBooleanField()
        prob=models.FloatField()

download_img.py

def spider(site):
        PWD = os.path.dirname(os.path.realpath(__file__ ))
        #site="http://en.wikipedia.org/wiki/Pune"
        hdr= {'User-Agent': 'Mozilla/5.0'}
        outfolder=os.path.join(PWD, "../downloads")
        #outfolder="/home/mayank/Desktop/dreamport/downloads"
        print "MAYANK:"+outfolder
        req = urllib2.Request(site,headers=hdr)
        page = urllib2.urlopen(req)
        soup =bs(page)
        tag_image=soup.findAll("img")
        count=1;
        for image in tag_image:
                print "Image: %(src)s" % image
                filename = image["src"].split("/")[-1]
                outpath = os.path.join(outfolder, filename)
                urlretrieve('http:'+image["src"], outpath)
                im = img(image_id=count,source_id=1,image=outpath,text_ind=None,prob=0)
                im.save()
                count=count+1

我正在像这样的一个视图内调用download_imgs.py

        if form.is_valid():
                url = form.cleaned_data['url']
                spider(url)

问题答案:

Django Documentation总是一个很好的起点

class ModelWithImage(models.Model):
    image = models.ImageField(
        upload_to='images',
    )

更新

因此,此脚本有效。

  • 循环播放图片以进行下载
  • 下载图片
  • 保存到临时文件
  • 适用于模型
  • 保存模型
import requests
import tempfile

from django.core import files

# List of images to download
image_urls = [
    'http://i.thegrindstone.com/wp-content/uploads/2013/01/how-to-get-awesome-back.jpg',
]

for image_url in image_urls:
    # Steam the image from the url
    request = requests.get(image_url, stream=True)

    # Was the request OK?
    if request.status_code != requests.codes.ok:
        # Nope, error handling, skip file etc etc etc
        continue

    # Get the filename from the url, used for saving later
    file_name = image_url.split('/')[-1]

    # Create a temporary file
    lf = tempfile.NamedTemporaryFile()

    # Read the streamed image in sections
    for block in request.iter_content(1024 * 8):

        # If no more file then stop
        if not block:
            break

        # Write image block to temporary file
        lf.write(block)

    # Create the model you want to save the image to
    image = Image()

    # Save the temporary image to the model#
    # This saves the model so be sure that is it valid
    image.image.save(file_name, files.File(lf))


 类似资料:
  • 问题内容: 因此,基本上,我需要上传单个图像,将其保存到localStorage,然后在下一页上显示。 目前,我已经上传了HTML文件: 使用该功能在页面上显示图像 该图像立即显示在页面上,供用户查看。然后要求他们填写表格的其余部分。这部分工作正常。 表格填写完毕后,他们将按“保存”按钮。按下此按钮后,我将所有表单输入另存为字符串。我需要一种将图像另存为项目的方法。 保存按钮还会将它们定向到新页面

  • 问题内容: 我目前正在我的应用程序中显示视频,希望用户能够将其保存到其设备图库/相册照片/相机胶卷中。这就是我正在做的事情,但视频未保存在相册中:/ 我也调查这个: 但是我有错误“无法从文件创建数据(空)”。我的“ assetChangeRequest”为零。我不了解我的网址是有效的,并且当我使用浏览器访问它时,它会下载快速时间文件。 如果有人可以帮助我,将不胜感激!我正在使用Swift,并将iO

  • 问题内容: 我一直在寻找一种从URL下载图像,对其执行一些图像操作(调整大小)操作,然后将其保存到django ImageField的方法。使用两个很棒的帖子(下面链接),我已经能够下载图像并将其保存到ImageField。但是,一旦有了文件,我在操作文件时会遇到一些麻烦。 具体来说,模型字段save()方法需要File()对象作为第二个参数。因此,我的数据最终必须是File()对象。下面链接的博

  • 问题内容: 这是我的模特。我想要做的是生成一个新文件,并在保存模型实例时覆盖现有文件: 我看到很多有关如何上传文件的文档。但是,如何生成文件,将其分配给模型字段并将Django存储在正确的位置呢? 问题答案: 你想看看Django文档中的FileField和FieldFile,尤其是FieldFile.save()。 基本上,声明为的字段在访问时为你提供class的实例,该实例为你提供了几种与基础

  • 问题内容: 我正在尝试从某些网址下载图片。对于某些图片,它工作正常,但对于其他图片,我会收到403错误。 例如,这个:http : //blog.zenika.com/themes/Zenika/img/zenika.gif 此图片访问不需要任何身份验证。您可以在链接上单击自己,并使用200状态代码验证该链接可用于您的浏览器。 以下代码产生一个异常:。相同的是,它们在引擎盖下使用相同的方法。 我使

  • 问题内容: 好的,我已经尝试了几乎所有内容,但无法正常工作。 我有一个上面带有ImageField的Django模型 我有通过HTTP下载图像的代码(已测试并且可以工作) 图像直接保存到“ upload_to”文件夹中(upload_to是在ImageField上设置的文件夹) 我需要做的就是将已经存在的图像文件路径与ImageField相关联 我已经用6种不同的方式编写了这段代码。 我遇到的问题