- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个简单的上传表单,其中包含一个图像 FileField
:
def post(request):
if request.user.is_authenticated():
form_post = PostForm(request.POST or None, request.FILES or None)
if form_post.is_valid():
instance = form_post.save(commit=False)
instance.user = request.user
instance.save()
return HttpResponseRedirect('/home/')
else:
form_post = PostForm()
context = {
'form_post': form_post,
}
return render(request, 'post/post.html', context)
else:
return HttpResponseRedirect("/accounts/signup/")
当用户向表单添加图像时,它会触发此 JS 函数:
$('input#id_image').on('change', function(e) {...}
提供图像的预览。这是我希望将图像上传到我的媒体文件夹目录的地方(我正在使用 S3 存储)。默认情况下,当用户提交表单时会上传图片,但我希望它尽快上传 $('input#id_image').on('change'
被触发。
到目前为止,我所做的是检索 InMemoryUploadedFile
中的图像我认为的格式:
$('input#id_image').on('change', function(e) {
var formData = new FormData();
formData.append('image', $('input[type=file]')[0].files[0]);
formData.append('csrfmiddlewaretoken', $("input[name='csrfmiddlewaretoken']").val());
$.ajax({
url: '/upload_image/',
data: formData,
type: 'POST',
contentType: false,
processData: false,
...
});
^ 发送到 View :
def upload_image(request):
if request.is_ajax():
img = request.FILES.get('image')
print(img) #successfully prints the filename
但在上传此 InMemoryUploadedFile
方面,我不知道下一步该怎么做到我的 S3 存储桶。有什么建议吗?
编辑
img = request.FILES.get('image')
print(img) # successfully prints the filename
s3_connection = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, host="us-east-1")
bucket = s3_connection.get_bucket('my-bucket', validate=False)
key = Key(bucket, img.name)
key.send_file(img) #this line fires the error
return HttpResponse('upload ok')
key.send_file(img)
返回此错误:
socket.gaierror: [Errno 8] nodename nor servname provided, or not known
Traceback (most recent call last):
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/zorgan/Desktop/project/site/draft1/views.py", line 201, in upload_image
key.send_file(img)
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/s3/key.py", line 762, in send_file
chunked_transfer=chunked_transfer, size=size)
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/s3/key.py", line 963, in _send_file_internal
query_args=query_args
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/s3/connection.py", line 671, in make_request
retry_handler=retry_handler
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/connection.py", line 1071, in make_request
retry_handler=retry_handler)
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/connection.py", line 1030, in _mexe
raise ex
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/connection.py", line 940, in _mexe
request.body, request.headers)
File "/Users/zorgan/Desktop/app/lib/python3.5/site-packages/boto/s3/key.py", line 803, in sender
http_conn.endheaders()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1102, in endheaders
self._send_output(message_body)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 934, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 877, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1252, in connect
super().connect()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 849, in connect
(self.host,self.port), self.timeout, self.source_address)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/socket.py", line 693, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/socket.py", line 732, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 8] nodename nor servname provided, or not known
最佳答案
让 boto
工作时遇到问题,但我升级到 boto3
并且现在工作正常。
代码如下:
img = request.FILES.get('image')
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
s3 = session.resource('s3')
s3.Bucket('my-bucket').put_object(Key='media/%s' % img.name, Body=img)
return HttpResponse()
这会在 AJAX 调用期间成功将图像上传到我的存储桶。
关于javascript - 如何将 InMemoryUploadedFile 上传到我的 S3 存储桶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49332470/
我有一个用户将文件上传到网站,我需要解析电子表格。这是我的代码: input_file = request.FILES.get('file-upload') wb = xlrd.open_workbo
有谁知道如何将 Django2 中上传文件( InMemoryUploadedFile )的内容转换为字符串? 我想知道下面的怎么写convert2string() : uploaded_file =
我有一个从输入字段中选择并通过 Django 中的表单发布的图像文件。 我要发布到另一台服务器的表单数据和图像. 问题好像是,请求中的文件数据是一个InMemoryUploadedFile类型,需要和
我正在尝试在 Django 中发送带有附件的电子邮件。文件是 request.FILE['file']对象(InMemoryUploadedFile 类型)。我通过 EmailMessage(...)
我在将图像从 Django 上传到 S3 存储桶时遇到问题 我收到的错误是: 'InMemoryUploadedFile' object has no attribute 'get' 我看过类似的问题
我有一个 InMemoryUploadedFile 对象,当我对其进行 .read() 时,它会丢失其内容。 是否有可能从同一个对象中两次读取此内容?我试着 .copy() 它,但当然那不应该工作。
我正在 try catch 与表单一起发送的文件并在保存之前对其执行一些操作。所以我需要在临时目录中创建这个文件的副本,但我不知道如何访问它。 Shutil 的函数无法复制此文件,因为它没有路径。那么
我有一个模板,用户可以在其中选择并从他们的计算机上传文件。该文件最终会上传到 S3,但首先会使用自定义验证来验证文件的某些内容。为了检查内容,脚本读取 forms.py 中文件的行: from io
我让用户上传一个 txt 文件,然后提交它,这样我就可以在我的一个 View 中对该文件进行一些处理。 我遇到了一些问题,但在社区的帮助下,现在至少可以识别我表单中的 POST 方法。 发生的事情是我
我有一个在 Eclipse 上使用 Python2.7 和 Django1.2 的 Google Appengine 项目,它允许用户使用表单上传图片、调整图片大小并将其存储为 BLOB 字段。 我在
我的程序是在 Django 中。我从js请求中获取上传的文件。FILES: my_docs = {} for doc_title in request.FILES: doc_name = re
我知道打开一个文件只会创建一个文件处理程序,无论文件大小如何,它都会占用固定的内存。Django 有一个名为 InMemoryUploadedFile 的类型,它表示通过表单上传的文件。 我像这样在
我已阅读所有 documentation对于 TemporaryUploadedFiles 和 InMemoryUploadedFiles,但他们从不谈论清理。我知道 Python 临时文件需要关闭才
我有一个 django 表单,其中有一个接受用户简历的 FileField。我稍后会将简历转换为 html 文档。所以我想到立即对原始文档进行pickle并在其中存储一个数据库列,然后将其unpick
我有以下模型: class IdentifierImage(models.Model): super = models.ForeignKey(Super) identifier = m
我有一个简单的上传表单,其中包含一个图像 FileField : def post(request): if request.user.is_authenticated():
我一直在尝试 help(django.db.models.ImageField)和 dir(django.db.models.ImageField) ,寻找如何创建 ImageField来自上传图像的
所以我正在尝试制作一个包含一些数据和上传字段的表单。 Django 文档没有提供任何在没有 forms.py 的情况下执行此操作的好的教程。我不想用它。 我尝试在我的项目中使用 forms.py (
在 Django Rest 框架中,我想将作为 InMemoryUploadedFile 接收的文件在收到后立即发布到不同的服务器。 听起来很简单,但是 request.post() 函数似乎无法正确
我正在尝试将文件从 postman 上传到 s3 并在k.set_contents_from_filename(文件)类型错误:无效文件:你能看看吗?非常感谢。 序列化器.py from rest_f
我是一名优秀的程序员,十分优秀!