我对Django很陌生,我正在做一个项目,在这个项目中,我必须自动将PDF文件从一个给定的文件夹上传到Django的一个模型中,这些文件将经历一个文本提取过程。我写了一个脚本来监控文件夹并上传新文件到数据库。
django的模型是这样的:
class Version(models.Model):
id = models.AutoField(primary_key = True)
file = models.FileField(upload_to = history_directory_path, db_column = 'file', max_length = 500)
filename = models.CharField(default = '', max_length = 100, db_column = 'filename')
date = models.DateTimeField(auto_now_add = True, db_column = 'date)
version_num = models.IntegerField(null = True, blank = True)
history_directory_path是一个函数,它使用文件名和版本号创建文件夹。我的自动上传脚本(在这个例子中只有一个文件,当它开始工作时我将把它放在一个循环中)如下:
from django.core.files import File
from myapp.models import Version
import os
import glob
BASE_PATH = r'C:pathtofolder_to_be_monitored'
files = [os.path.basename(x) for x in glob.glob(BASE_PATH + '/*.pdf')]
filename = files[0]
f = open(os.path.join(BASE_PATH, filename), 'rb')
my_file = File(f)
version = Version(file = my_file, filename = filename, version_num = 1)
version.save()
执行最后一个命令我得到
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\Users\user_name\PycharmProjects\project\project\media\documents\history\filename\version_0\C:'
我读了很多关于在django中保存文件到filefield的问题(也读了相关的文档),但我不能为它做出一个工作的解决方案。而且我不明白C:是如何在错误信息中到达路径的末尾的。
你能给我指路或指出我哪里走错了吗?
尝试如下:
version = Version(filename = filename, version_num = 1)
version.file.save('filename_with_extension', my_file)
由于某些奇怪的原因,当首先创建对象,然后使用此方法保存文件时,此方法有效。
如果有人能解释op强调的问题,我将不胜感激。