我有一個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