gpt4 book ai didi

javascript - Django REST,上传的图像具有空值

转载 作者:数据小太阳 更新时间:2023-10-29 05:35:25 25 4
gpt4 key购买 nike

我有一个简单的应用程序,在前端使用 Django REST 和 Angular,但我在上传图片时遇到了问题。
我的模型:

class Photo(models.Model):

img = models.ImageField(upload_to='photos/', max_length=254)
text = models.CharField(max_length=254, blank=True)

当我通过表单发送图片时,文本上传正常,但图片有空值。
浏览器响应:

{"img":null,"text":"test"}

上传图片时打印self.data.request:

QueryDict: {'text': ['test'], 'InMemoryUploadedFile: filename.jpg (image/jpeg)]}

Serializer 只是简单的ModelSerializer,带有两个模型字段。
查看:

class PhotoViewSet(viewsets.ModelViewSet):

queryset = Photo.objects.all()
serializer_class = PhotoSerializer
parser_classes = (MultiPartParser, FormParser)

def perform_create(self, serializer):
serializer.save(img=self.request.data.get('file'))

photo_router = DefaultRouter()
photo_router.register(r'photo', PhotoViewSet)

对于图片上传,我使用 lib ng-file-upload ,我尝试了另一种上传方式,图像也为空。
Angular 代码:

var app = angular.module('myApp', ['ngRoute', 'ngFileUpload']);

app.config(function ($routeProvider) {

$routeProvider
.when('/', {
templateUrl: 'http://127.0.0.1:8000/static/js/angular/templates/home.html'
})
});
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}]);
app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function($scope, Upload, $timeout) {
$scope.uploadPic = function(file) {
file.upload = Upload.upload({
url: '/api/photo/',
data: {text: $scope.text, img: file},
});

file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
});
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
}, function (evt) {
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
}]);

最佳答案

您正在发布此 json data: {text: $scope.text, img: file},但是在 perform_create 方法中您调用了 self.request .data.get('文件')。我认为你必须将其更改为

serializer.save(self.request.data.get('img'))

关于javascript - Django REST,上传的图像具有空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35904403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com