代码之家  ›  专栏  ›  技术社区  ›  Amine Messaoudi

从url拖放到输入文件

  •  0
  • Amine Messaoudi  · 技术社区  · 7 年前

    我正在使用django开发一个新闻网站,在这个网站上我管理关于文章的数据 我有id,content,title,category和image这是一个文件域

    class Article(models.Model):
    
        id=models.AutoField(primary_key=True)
        title=models.CharField(max_length=100,null=False,blank=False)
        category=models.ForeignKey(Category,null=False,blank=False)
        date=models.DateTimeField(auto_now_add=True)
        content = models.TextField(null=False, blank=False)
        resume=models.CharField(null=False,blank=False,max_length=400)
        image = models.FileField(verbose_name=blank=True)
    

    表单包含一个输入文件

    <input type="file" name="image">
    

    但是我注意到这个输入只适用于本地图像。 只有当我从计算机中手动选择图像或将其拖动到输入时,它才起作用。

    我想知道是否有一个解决方案,我可以用来拖动一个图像从另一个网站的文件输入,因为每次我需要提交一个图像,我需要下载它。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Hozayfa El Rifai    7 年前

    您需要获取图像的url并使用 urllib2 下面是一个使用javascript获取url的简单示例

    $(document).on('dragover', function(e) {e.preventDefault();return false;});
        $(document).on('drop', function(e) {
            e.preventDefault();
            e.originalEvent.dataTransfer.items[0].getAsString(function(url){
                alert(url);
        });
    });
    

    from urllib.parse import urlparse
    import requests
    from django.core.files.base import ContentFile
    from myapp.models import Photo
    
    img_url = "url" #request.POST["url"] for example
    name = urlparse(img_url).path.split('/')[-1]
    
    photo = Article() # you need to use ImageFiled if it's just an image in your model
    
    response = requests.get(img_url)
    if response.status_code == 200:
        photo.image.save(name, ContentFile(response.content), save=True)