如何解决在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 可以正常工作文件夹。
这是回溯:
解决方法
pathlib.Path()
处理文件路径,而不是内存对象。 request.FILES
是附加到 POST 请求的数据。在处理 POST 请求期间,您可以验证此数据并决定将其保存到服务器磁盘。
如果您希望图像处理从服务器磁盘读取文件,则必须先保存新模型实例。然后,您可以通过模型 ImageField 的 name
属性访问文件在磁盘上的路径,请参阅 Using files in models。
如果你想在将上传的数据保存到磁盘之前对其进行处理,你可以阅读如下:
txt = request.FILES["xml_file"].read()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。