Загрузка файла с Django через PUT - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь реализовать функцию в Django для загрузки изображения с клиента (приложение для iPhone) на сервер Amazon S3.Приложение для iPhone отправляет HttpRequest (метод PUT) с содержимым изображения в HTTPBody.Например, клиент помещает изображение по следующему URL-адресу: http://127.0.0.1:8000/uploadimage/sampleImage.png/

Моя функция в Django выглядит так, чтобы обрабатывать такой запрос PUT и сохранять файл на S3:

def store_in_s3(filename, content):
    conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY) # gets access key and pass key from settings.py
    bucket = conn.create_bucket("somepicturebucket")
    k = Key(bucket)
    k.key = filename
    mime = mimetypes.guess_type(filename)[0]
    k.set_metadata("Content-Type", mime)
    k.set_contents_from_string(content)
    k.set_acl("public-read")

def upload_raw_data(request, name):
    if request.method == 'PUT':
        store_in_s3(name,request.raw_post_data)
        return HttpResponse('Upload of raw data to S3 successful')
    else:
        return HttpResponse('Upload not successful')

Моя проблема в том, как сообщить моей функции название изображения.В моем urls.py у меня есть следующее, но это не сработает:

url(r'^uploadrawdata/(\d+)/', upload_raw_data ),

Теперь, насколько я знаю, d + обозначает цифры, поэтому здесь, очевидно, бесполезно, когда я передаюимя файла.Однако мне было интересно, если это правильный путь в первую очередь.Я прочитал этот пост здесь , и он предлагает следующую строку кода, которую я совсем не понимаю:

file_name = path.split("/")[-1:][0]

Кроме того, я понятия не имею, что представляет собой остальная часть кодавсе о.Я немного новичок во всем этом, поэтому любые предложения о том, как просто загрузить изображение, будут очень кстати.Спасибо!

1 Ответ

1 голос
/ 11 февраля 2012

Этот вопрос на самом деле не о загрузке, и связанный ответ не имеет значения.Если вы хотите принять строку, а не цифры в URL, для передачи имени файла вы можете просто использовать w вместо d в регулярном выражении.

Изменить, чтобы уточнить Извините, не понял, что вы пытаетесь передать целый файл + расширение.Вы, вероятно, хотите это:

r'^uploadrawdata/(.+)/$'

, чтобы оно соответствовало любому символу.Возможно, вам следует прочитать введение в регулярные выражения.

...