перетащите с URL-адреса во входной файл - PullRequest
0 голосов
/ 09 июня 2018

Я работаю на новостном веб-сайте, используя django, в котором я управляю данными о статьях, которые у меня есть, идентификатором, контентом, заголовком, категорией и изображением, которое является FileField

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">

Форма правильно отправляет данные, и изображение успешно сохраняется.Однако я заметил, что этот вход работает только с локальными изображениями.Это работает, только если я вручную выбираю изображение на своем компьютере или перетаскиваю его на вход.

Если я перетаскиваю изображение с веб-сайта на вход, оно не работает.

IХотелось бы узнать, есть ли решение, которое я могу использовать для перетаскивания изображения с другого сайта на вход файла, потому что каждый раз, когда мне нужно отправить изображение, мне нужно его загрузить.

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 09 июня 2018

вам нужно получить URL-адрес изображения и загрузить его, используя urllib2. Вот простой пример того, как получить URL-адрес, используя javascript

$(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)
...