HTML通过Ajax上传图像至Django后端并转换为Mat图像

1、index.html

<script src="js/jquery-1.12.4.min.js"></script>
    <script>
        function fucTest() {
            let form_data = new FormData();
            let file_info = $("#img")[0].files[0];
            form_data.append('img', file_info);
            $.ajax({
                url: "http://127.0.0.1:8000/test/", // ocr服务url
                type: 'POST',
                data: form_data,
                processData: false,
                contentType: false,
                beforeSend: function(xhr, settings) {
                    xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}")
                },
                success: function (ret) {
                    $("#result").text(ret)
                }
            })
        }
</script>
......
<input type="file" name="img" id="img">
<button onclick="fucTest()">ocr test</button>
<p id="result"></p>

2、views.py

class Index(View):
    def get(self, request):
        return render(request, 'index.html')


class OCRView(View):
    def post(self, request):
        img = request.FILES.get('img')
        parser = ImageFile.Parser()
        for chunk in img.chunks():
            parser.feed(chunk)
        img = parser.close()
        img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
        result = "图像的尺寸:" + img.shape[1] + "_" + img.shape[0]
        return HttpResponse(result)

3、 urls.py

urlpatterns = [
    path('', Index.as_view(), name='index'),
    path('test/', OCRView.as_view(), name='test'),
]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现在QT程序中上传文件到Django后端,可以使用HTTP协议中的POST请求方法。以下是一个简单的实现步骤: 1. 在QT程序中获取要上传的文件路径。 2. 构造HTTP POST请求,包括请求头和请求体。请求头中需要设置Content-Type为multipart/form-data,请求体中需要设置boundary分隔符,并将文件内容作为请求体的一部分。 3. 使用QT的网络模块发送HTTP请求到Django后端。 4. 在Django后端中编写相应的视图函数,解析POST请求体中的文件内容,并将其存储到服务器中。 下面是一个示例的QT代码: ```cpp // 获取要上传的文件路径 QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("Files (*.*)")); // 构造HTTP POST请求 QUrl url("http://example.com/upload/"); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary=boundaryString"); // 设置请求体 QByteArray requestData; requestData.append("--boundaryString\r\n"); requestData.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + QFileInfo(filePath).fileName() + "\"\r\n"); requestData.append("Content-Type: application/octet-stream\r\n\r\n"); QFile file(filePath); if (file.open(QIODevice::ReadOnly)) { requestData.append(file.readAll()); file.close(); } requestData.append("\r\n--boundaryString--\r\n"); // 发送HTTP请求 QNetworkAccessManager manager; QNetworkReply *reply = manager.post(request, requestData); // 处理响应 connect(reply, &QNetworkReply::finished, [=]() { if (reply->error() == QNetworkReply::NoError) { qDebug() << "Upload success"; } else { qDebug() << "Upload failed: " << reply->errorString(); } reply->deleteLater(); }); ``` 在Django后端中,可以使用django-rest-framework模块来编写相应的视图函数,示例代码如下: ```python from rest_framework.views import APIView from rest_framework.parsers import MultiPartParser from rest_framework.response import Response class FileUploadView(APIView): parser_classes = [MultiPartParser] def post(self, request, format=None): file = request.data['file'] with open('/path/to/save/file', 'wb+') as destination: for chunk in file.chunks(): destination.write(chunk) return Response({'status': 'success'}) ``` 在这个视图函数中,使用MultiPartParser解析POST请求体中的文件内容,并将其存储到服务器中。注意要根据实际情况修改文件保存的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值