Входящий файл из почты - "fakepath".
Я новичок в реакции. Мой файл отправляется как fakepath. Я знаю, что это сделано для безопасности браузера, но я ожидал, что в моем представлении это будет по-другому. Когда я десериализую request.body с помощью json.loads, я получаю эту ошибку FileNotFound.
fitz.FileNotFoundError: no such file: 'C:\fakepath\HW 3 CPSC 332.pdf'
Когда я десериализую тело с помощью собственного сериализатора, он возвращает, что объект не является действительным. Я предполагаю, что это связано с той же проблемой с поддельным путем к файлу.
request.body
b'{"title":"sdfg","content":"","file":"C:\\\\fakepath\\\\HW 3 CPSC 332.pdf"}'
views.py
@api_view(['POST'])
def createPost(request):
serializer = SinglePostSerializer(data=request.body)
if serializer.is_valid():
serializer.save()
return Response({'message': 'File uploaded successfully'}, status=status.HTTP_201_CREATED)
else:
return Response({'errors': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class SinglePostSerializer(ModelSerializer):
class Meta:
model = Post
fields = '__all__'
models.py
# Create your models here.
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=50)
likes = models.IntegerField(default=0)
comment_count = models.IntegerField(default=0)
pdf_file = models.FileField(upload_to='media/pdfs/')
images = models.ManyToManyField(SheetMusicImage)
comments = models.ManyToManyField('Comment', blank=True)
date_created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.pdf_file.name
CreatePostPage.js
import React, { useState, useEffect} from 'react'
const CreatePostPage = () => {
const [formData, setFormData] = useState({
// Initialize form fields here
// For example:
title: '',
content: '',
});
const handleChange = (e) => {
setFormData({
...formData,
[e.target.name]: e.target.value,
});
};
const handleSubmit = async (e) => {
e.preventDefault();
try {
console.log(JSON.stringify(formData))
const response = await fetch('posts/createPost', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(formData),
});
if (response.ok) {
// Handle successful submission, e.g., redirect or show a success message
console.log('Post created successfully');
} else {
// Handle error cases
console.error('Failed to create post');
}
} catch (error) {
console.error('Error:', error);
}
};
return(
<div>
<form onSubmit={handleSubmit}>
<input type="text" id="title" name="title" placeholder="Title" onChange={handleChange}/>
<input type="file" id="file" name="file" accept="application/pdf" onChange={handleChange}/>
<button type="submit">Submit</button>
</form>
</div>
);
}
export default CreatePostPage