我有一个Django应用程序,用于上传KML文件以及中的state
值。要显示这些KML档案,我想访问他们的服务器上的原始文件,我正在尝试做如下:在Django服务器上以文本/纯文本格式提供原始文件
def result(request): #mapped to /getFiles url
state = request.GET['state']
res = KmlModel.objects.get(state__state__exact=state)
obj = res.Kml_File.url
serve_file(obj)
def serve_file(filename):
response = HttpResponse(mimetype="text/plain")
for line in open(filename):
response.write(line)
return response
我面临的问题是,上试图访问/getFiles?state=SomeState
,它给此错误 OSError at /getFiles [Errno 22] Invalid argument: 'http://127.0.0.1:8000/static/img/dynamic/RR.kml'
其中RR.kml
是SomeState
的匹配KML文件。
任何想法如何我可以解决这个问题?
编辑
def result(request):
state = request.GET['state']
res = KmlModel.objects.get(state__state__exact=state)
return HttpResponse(res.Kml_File.open(), mimetype='text/plain')
Models.py
class KmlModel(models.Model):
id = models.AutoField(primary_key=True)
Kml_File = models.FileField(upload_to='dynamic/')
state = models.ForeignKey(State)
def __unicode__(self):
return self.state.state
由于某种原因,仍会下载该文件。我添加了'content-type ='text/plain''来回应。 – Newtt 2014-10-09 12:17:58
好吧,现在我明白你在做什么。问题是,dev服务器将使用Python标准库中的'mimetypes'模块来猜测文件的类型,并且没有简单的方法来覆盖它。但是,当您转到生产环境时,您将能够明确地配置Web服务器以将“.kml”作为文本/纯文本进行处理。 – 2014-10-09 12:31:02
现在我看到有一个更简单的方法,请参阅我的编辑。 – 2014-10-09 12:45:19