Solución:
Estoy usando la misma pila y también estaba buscando un ejemplo de carga de archivos, pero mi caso es más simple ya que uso ModelViewSet en lugar de APIView. La clave resultó ser el gancho pre_save. Terminé usándolo junto con el módulo de carga de archivos angulares así:
# Django
class ExperimentViewSet(ModelViewSet):
queryset = Experiment.objects.all()
serializer_class = ExperimentSerializer
def pre_save(self, obj):
obj.samplesheet = self.request.FILES.get('file')
class Experiment(Model):
notes = TextField(blank=True)
samplesheet = FileField(blank=True, default="")
user = ForeignKey(User, related_name="experiments")
class ExperimentSerializer(ModelSerializer):
class Meta:
model = Experiment
fields = ('id', 'notes', 'samplesheet', 'user')
// AngularJS
controller('UploadExperimentCtrl', function($scope, $upload) {
$scope.submit = function(files, exp) {
$upload.upload({
url: '/api/experiments/' + exp.id + "https://foroayuda.es/",
method: 'PUT',
data: {user: exp.user.id},
file: files[0]
});
};
});
Utilice FileUploadParser, todo está en la solicitud. Use un método put en su lugar, encontrará un ejemplo en los documentos 🙂
class FileUploadView(views.APIView):
parser_classes = (FileUploadParser,)
def put(self, request, filename, format=None):
file_obj = request.FILES['file']
# do some stuff with uploaded file
return Response(status=204)
Finalmente puedo subir una imagen usando Django. Aquí está mi código de trabajo
views.py
class FileUploadView(APIView):
parser_classes = (FileUploadParser, )
def post(self, request, format="jpg"):
up_file = request.FILES['file']
destination = open('/Users/Username/' + up_file.name, 'wb+')
for chunk in up_file.chunks():
destination.write(chunk)
destination.close() # File should be closed only after all chuns are added
# ...
# do some stuff with uploaded file
# ...
return Response(up_file.name, status.HTTP_201_CREATED)
urls.py
urlpatterns = patterns('',
url(r'^imageUpload', views.FileUploadView.as_view())
solicitud curl para cargar
curl -X POST -S -H -u "admin:password" -F "[email protected];type=image/jpg" 127.0.0.1:8000/resourceurl/imageUpload
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)