javascript 我有两个错误,因为Django或Apache

6ljaweal  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(113)

当我尝试向http://localhost/upload-avatar/发送POST请求时,我得到了两个错误
404(未找到)
语法错误:意外的标记“|”,“<!DOCTYPE“不是有效的JSON。
我想知道是什么原因以及如何解决这个问题。有人怀疑问题出在Apache上。我用的是wamp。在使用和编写wamp代码一段时间后,我连接了Django。配置Apache。我还检查了路由设置和服务器启动,但问题仍然存在。我请求帮助识别和消除此问题。感谢您的评分
代码:
JS:

PhotoUpload.addEventListener('change', function() {
      const file = this.files[0];
      if (file) {
        const reader = new FileReader();
        reader.addEventListener('load', function() {
          photo.setAttribute('src', this.result);
          photo.classList.remove('alt-centered');
          PhotoUpload.style.display = 'none'; 
  

          const formData = new FormData();
          formData.append('photo', file);
  
          fetch('/upload-avatar/', {
            method: 'POST',
            body: formData
          })
          .then(response => response.json())
          .then(data => {
            console.log(data);
          })
          .catch(error => {
            console.error('Error:', error);
          });
        });
  
        reader.readAsDataURL(file);
      } else {
        photo.setAttribute('src', '#');
        photo.classList.add('alt-centered');
        PhotoUpload.style.display = 'block';
      }
    });
  };

views.py

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.core.files.storage import default_storage
from django.http import JsonResponse

@csrf_exempt
def upload_avatar(request):
    if request.method == 'POST' and request.FILES.get('photo'):
        photo = request.FILES['photo']
        # Сохраните фотографию с помощью default_storage
        filename = default_storage.save('photos/' + photo.name, photo)
        return JsonResponse({'message': f'Photo uploaded successfully: {filename}'})
    return JsonResponse({'error': 'An error occurred while uploading the photo.'})

urls.py

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from PhotoSave import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('upload-avatar/', views.upload_avatar, name='upload_avatar'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在Apache文件(httpd.conf)中,我只更改了

<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<Directory "${INSTALL_DIR}/www/Chat/MediaSave">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

并添加了LoadModule wsgi_module modules/mod_wsgi.so

oxf4rvwz

oxf4rvwz1#

你从视图中得到一个Django错误页面。我的建议是,捕获错误并将异常消息发送给客户端。在GET视图的情况下,我建议你在浏览器中手动调用它,但我知道手动调用POST视图很困难(你应该编写一个调用此视图的表单)。

@csrf_exempt
def upload_avatar(request):
    if request.method == 'POST' and request.FILES.get('photo'):
        try:
            photo = request.FILES['photo']
            # Сохраните фотографию с помощью default_storage
            filename = default_storage.save('photos/' + photo.name, photo)
            return JsonResponse({'message': f'Photo uploaded successfully: {filename}'})
        except Exception as ex:
            return JsonResponse({'exception': str(ex)})

    return JsonResponse({'error': 'An error occurred while uploading the photo.'})

相关问题