微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在django中上传和操作xml和图像文件

如何解决在django中上传和操作xml和图像文件

代码返回 TypeError 作为预期的 str、bytes 或 os.pathLike 对象,而不是 InMemoryUploadedFile 我不知道如何以文件和图像的形式将用户数据传递到我的 code.py 文件中以对原始文件进行更改。

views.py

def home(request):
new_image = None
file = None
form = ScanForm()
if request.method == 'POST':
    form = ScanForm(request.POST,request.FILES)
    if form.is_valid():
        image = request.FILES['image']
        xml_file = request.FILES['xml_file']
        new_image = code.create(image,code.search(
            xml_file)[0],code.search(xml_file)[1])
        form.save()

        return render(request,'app/home.html',{'form': form,'new_image': new_image})
    else:
        form = ScanForm()
return render(request,'new_image': new_image})
打印图像和xml_file成功打印出他们的名字

forms.py

class ScanForm(forms.ModelForm):
class Meta:
    model = Scan
    fields = '__all__'

models.py

class Scan(models.Model):
image = models.ImageField(upload_to='images')
xml_file = models.FileField(upload_to='files')
processed_at = models.DateTimeField(auto_Now_add=True)
description = models.CharField(max_length=500,null=True)

class Meta:
    ordering = ['-processed_at']

def __str__(self):
    return self.description
这里是根据数据操作图片代码在xml中

code.py

def search(path):
new = []
object_names = []
object_values = []

txt = Path(path).read_text()
txt.strip()
names = et.fromstring(txt).findall('object')
for i in names:
    object_names.append(i[0].text)
values = et.fromstring(txt).findall('object/bndBox')
for i in values:
    for j in i:
        object_values.append(int(j.text))

return object_names,object_values


def create(image,object_names,object_values):
img = cv.imread(image)
on = len(object_names)
ov = len(object_values)
for i in list(range(0,ov,on)):
    cv.rectangle(img,(object_values[i],object_values[i+1]),(object_values[i+2],object_values[i+3]),(0,255),thickness=5)
return img
如果通过使用本地手动传递数据进行测试,此 code.py 可以正常工作文件夹。

这是回溯:

Traceback image

解决方法

pathlib.Path() 处理文件路径,而不是内存对象。 request.FILES 是附加到 POST 请求的数据。在处理 POST 请求期间,您可以验证此数据并决定将其保存到服务器磁盘。

如果您希望图像处理从服务器磁盘读取文件,则必须先保存新模型实例。然后,您可以通过模型 ImageField 的 name 属性访问文件在磁盘上的路径,请参阅 Using files in models

如果你想在将上传的数据保存到磁盘之前对其进行处理,你可以阅读如下:

txt = request.FILES["xml_file"].read()

UploadedFile.read()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?