Der Wert, der im Datenspeicher gespeichert und von appengine mit einer db.BlobProperty zurückgegeben wird, entspricht nicht den tatsächlichen Bytes des Blobs, sondern einem BlobKey, der für die Referenz verwendet wird. Es gibt zwei Möglichkeiten, wie Sie diesen Schlüssel verwenden können. Sie können einen BlobReader erstellen, um die Bytes des Blobs aus dem BlobStore in Ihre App zu laden, oder Sie können eine Antwort mit ServeHandler.send_blob erstellen, um diese Bytes an den Client zu übertragen.
Das zweite in Django zu tun ist ein bisschen Kopfschmerzen, weil ServeHandler nicht wirklich gut mit dem Django Request Processing Stack passt. Hier ist eine Ansicht, die es für Sie ohne zu viele Probleme tun wird:
def get_image_data(request, key, filename):
"serve original uploaded image"
# verify the users' ability to get the requested image
key = urllib.unquote(key)
img = _load_metadata(request, key)
blob = img.data;
blobkey = blob.key()
# and tell google to serve it
response = http.HttpResponse(
content='',
content_type=blob.content_type)
response['X-AppEngine-BlobKey'] = str(blobkey)
return response
wie der Code vorschlagen, ist es auf Google Application Engine und das Schreiben von Dateien ist nicht erlaubt. Sie müssen Ihre Dateien im Blob Store selbst speichern. –
@anand: oh! mein Fehler. –