我正在开发应用程序,其中 react-native 作为前端,django-rest-framework 作为后端。从前端我在后端使用 formdata 发送图像。但是我收到此错误无法将对象转换为“文件名”的“str”。
前端代码
const estPrice = async () => {
const formData = new FormData();
console.log(Page1)
formData.append("book_page1", {
name: "page1.jpg",
uri: Page1,
type: "image/jpg",
});
formData.append("book_page2", {
name: "page2.jpg",
uri: Page2,
type: "image/jpg",
});
formData.append("book_page3", {
name: "page3.jpg",
uri: Page3,
type: "image/jpg",
});
try {
const result = await authAxios.post("/sell/estprice", formData);
console.log(result)
} catch (error) {
console.log(error);
}
};
后台代码
class BookEstimatedPriceView(GenericAPIView):
def post(self, request):
data = request.data
print(data)
img1 = data.get('book_page1', '');
img2 = data.get('book_page2', '');
img3 = data.get('book_page3', '');
print(img1)
def rgb_to_hex(rgb_color):
hex_color = "#"
for i in rgb_color:
i = int(i)
hex_color += ("{:02x}".format(i))
return hex_color
# img1 = 'C:/Users/Aditya Pandit/Desktop/Image/Aditya@123/photo1.jpg'
# img2 = 'C:/Users/Aditya Pandit/Desktop/Image/Aditya@123/photo2.jpg'
# img3 = 'C:/Users/Aditya Pandit/Desktop/Image/Aditya@123/photo3.jpg'
img1 = cv2.imread(img1)
img2 = cv2.imread(img2)
img3 = cv2.imread(img3)
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)
n_clusters = 1
list_hex = []
img_list = [img1, img2, img3]
for item in img_list:
kmeans = KMeans(n_clusters)
kmeans.fit(item)
colors = kmeans.cluster_centers_
labels = kmeans.labels_
label_count = [0 for i in range(n_clusters)]
for ele in labels:
label_count[ele] += 1
index_color = label_count.index(max(label_count))
dict_colour_percen = {}
print
for index, ele in enumerate(label_count):
#print(str(ele)+' labels with pixel value -> '),
hex_color = rgb_to_hex(colors[index])
#print(hex_color,)
list_hex.append(hex_color)
color_percen = float(ele)/len(labels)*100
print('Percentage ->'+str(color_percen))
dict_colour_percen[hex_color] = color_percen
print()
plt.show()
print()
list_first_index = []
for items in list_hex:
list_first_index.append(items[1:2])
print(list_first_index)
price = 200
estimated_price = 0
list_per = []
for items in list_first_index:
#for color in list_color_palette:
if(items=='0' or items=='1'):
list_per.append(20)
if(items=='2'):
list_per.append(26.3)
if(items=='3'):
list_per.append(32.6)
if(items=='4'):
list_per.append(38.9)
if(items=='5'):
list_per.append(45.2)
if(items=='6'):
list_per.append(51.5)
if(items=='7'):
list_per.append(57.8)
if(items=='8'):
list_per.append(64.1)
if(items=='9'):
list_per.append(70.4)
if(items=='a'):
list_per.append(76.7)
if(items=='b'):
list_per.append(83)
if(items=='c'):
list_per.append(89.3)
if(items=='d'):
list_per.append(90)
if(items=='e'):
list_per.append(90)
if(items=='f'):
list_per.append(90)
print(list_per)
sum = 0
for item in list_per:
sum+=item
avg_per=sum/len(list_per)
print(avg_per)
estimated_price = price*(avg_per/100)
print(estimated_price)
data = {
'est_price': estimated_price
}
return Response(data, status=status.HTTP_200_OK);
错误
Internal Server Error: /api/sell/estprice
Traceback (most recent call last):
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\views\decorators\csrf.py", line 56, in wrapper_view
return view_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\views\generic\base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\Desktop\bookmart\bookmart\sell\views.py", line 70, in post
img1 = cv2.imread(img1)
^^^^^^^^^^^^^^^^
TypeError: Can't convert object to 'str' for 'filename'
我期待从前端获取图像,在后端处理并获得响应。对于绝对路径,api 工作正常。但是,对于来自前端的图像,它给出了错误。
你需要使用
request.FILES.get('img*')