我有一个django网络服务。我希望能够接受来自iOS应用程序的图像,将图像保存到数据库中(图像文件本身应该放在我的s3存储桶中)。
通过管理员保存它非常容易,您只需定义upload_to
并将存储桶设置为static_url,但我找不到任何有关如何保存应用程序发送的图像的示例/文档,例如
有人能指出我正确的方向还是举例?
更多信息,因为我的问题含糊不清:
class Image(models.Model):
name = models.CharField(max_length = 255)
caption = models.CharField(max_length = 255)
image = models.ImageField(upload_to='uploads/',blank=True,null=True)
rent_property = models.ForeignKey(RentProperty, related_name='Images')
is_main_image = models.BooleanField(default=False)
setting.py
#Amazon Bucket
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = '################'
AWS_SECRET_ACCESS_KEY = '#####################'
AWS_STORAGE_BUCKET_NAME = 'string'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
这是我的图像类,我尝试做的是从应用程序获取图像,将其保存到数据库和S3存储,并将其链接到正确的外键。
我的麻烦在于了解如何在将信息保存到数据库时将文件保存到S3。
答案 0 :(得分:0)
我在这里回答了一个非常相似的问题:Best way to upload image from Mobile to Django server因此你可能会被视为可能的重复。
图像是否会链接到数据库对象(可能是图像模型)?
如果是这样,请添加到上面链接的代码:
@csrf_exempt
def handle_uploads(request):
if request.method == 'POST':
uploaded_file = request.FILES['file']
file_name = uploaded_file.name
# Write content of the file chunk by chunk in a local file (destination)
with open('path/to/destination_dir/' + file_name, 'wb+') as destination:
for chunk in uploaded_file.chunks():
destination.write(chunk)
# Create your object
obj = Image.objects.create(file_field='path/to/destination_dir/' + file_name)
obj.save()
response = HttpResponse('OK')
return response
希望这有帮助,
编辑:
我可能误解了你,如果你打算使用外置存储,为什么还要问如何保存图像?你的意思是你只想保存文件名吗?或者你想让Django无缝地使用S3存储?我相信它有详细记录https://docs.djangoproject.com/en/1.6/howto/custom-file-storage/,但上面的代码需要一些返工。
发现很少:http://www.laurentluce.com/posts/upload-and-download-files-tofrom-amazon-s3-using-pythondjango/
对于你想要实现的目标来说,这似乎是完美的。只需将上传部分添加到上面的代码中,您就应该在轨道上:)