该视图未返回HttpResponse对象它使用numpy-stl返回None

问题描述

我有一个Django Web应用程序,我正在尝试进行ajax调用上传3D图像(如.stl,.stp等),以便使用pythonocc-core软件包获取其体积信息。当文件大小小于1 MB时,我将使用普通的ajax请求运行该文件,而当文件大小较大时,我将其作为后台任务运行,以免进程超时。

我的ajax请求;

var data = new FormData();
var img = $('#id_Volume')[0].files[0];
var img_size = (img.size / 1048576).toFixed(2);
data.append('img',img);
data.append('csrfmiddlewaretoken','{{ csrf_token }}');
if (img_size <= 1){
    $.ajax({
        method: 'POST',url: '{% url 'data:smallUpload' %}',type: 'POST',contentType: false,processData: false,data: data,}).done(function(data) {
        $("#id_rectangleRemovedVolume").val(data['removed_volume']);
        $("#id_rectangleVolume").val(data['volume']);
        loader.style.display = 'none';
        $("#id_Volume").val('');
    }).fail(function(xhr,text,error) {
        console.log(text,error)
    });
} else {
    $.ajax({
        method: 'POST',url: '{% url 'data:upload' %}',}).done(function(data) {
        window.location.href = "{% url 'data:uploadStatus' %}";
    }).fail(function(xhr,error)
    });
}

我的smallUpload视图;

def uploadSmallFile(request):
    if request.POST or None:
        file = request.FILES.get('img')
        filename = file.name
        key = 'media/' + filename
        s3_resource = boto3.resource('s3')
        bucket = s3_resource.Bucket('bucket')
        bucket.put_object(Key=key,Body=file)
        if filename != '':
            volume,removed_volume = Methods.get_volume_info(key)
            #do something
        context = {'volume': volume,'removed_volume': removed_volume}
        return JsonResponse(context)

我的get_volume_info函数

@staticmethod
def get_volume_info(uploadedVolume):
    s3 = boto3.resource('s3',region_name='eu-central-1')
    bucket = s3.Bucket('bucket')
    obj = bucket.Object(uploadedVolume)
    tmp = tempfile.NamedTemporaryFile()
    with open(tmp.name,'wb') as f:
        obj.download_fileobj(f)
        meshLoader = CADLoader(tmp.name,uploadedVolume)
    volume = meshLoader.shape_volume()
    Box_volume = meshLoader.shape_Box_volume()
    rectangleVolume = "{0:.2f}".format(Box_volume)
    rectangleRemovedVolume = "{0:.2f}".format(((Box_volume - volume) / Box_volume) * 100.0)
    return rectangleVolume,rectangleRemovedVolume

当我上传一个文件时,我可以向这个smallUpload视图发送请求,并毫无问题地获取卷信息。但是我想对.stl文件使用numpy-stl库,因为它比pythonocc更快。当我按如下所示向get_volume_info函数添加条件时,出现The view data.views.uploadSmallFile didn't return an HttpResponse object. It returned None instead.错误

新的get_volume_info函数

@staticmethod
def get_volume_info(uploadedVolume):
    s3 = boto3.resource('s3','wb') as f:
        obj.download_fileobj(f)
        if '.stl' in uploadedVolume.lower():
            stl = STLLoaderClass(tmp.name)
            rectangleVolume,rectangleRemovedVolume = stl.read_stl()
        else:
            meshLoader = CADLoader(tmp.name,uploadedVolume)
            volume = meshLoader.shape_volume()
            Box_volume = meshLoader.shape_Box_volume()
            rectangleVolume = "{0:.2f}".format(Box_volume)
            rectangleRemovedVolume = "{0:.2f}".format(((Box_volume - volume) / Box_volume) * 100.0)
    return rectangleVolume,rectangleRemovedVolume

如上面的代码所示,当接收到扩展名为.stl的文件时,我将其发送到STLLoaderClass。通常,该类适用于我正在尝试的.stl文件,但是当我通过Ajax请求调用它时,该类不起作用。同样在我的日志中,有一条错误行,如下所示。

stl.base.BaseMesh - WARNING - Your mesh is not closed,the mass methods will not function
            correctly on this mesh.

但是正如我所说,我尝试过的STLLoaderClass和.stl文件都可以正常工作。我该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...