OnlineJudge
OnlineJudge copied to clipboard
增强上传测试样例时的功能,使通过压缩文件夹方式也可以成功上传
1.目的
OJ在上传测试题目用例的时候只可以使用压缩文件的方式,但是对于常用的直接压缩文件夹的方式会提示Empty file
,对于提高用户(不愿意看文档或看不懂文档)体验来说,不妨将两种上传方式都加入。
2.修复方式
为了向下兼容以及符合开闭原则,我只增加了 OnlineJudge/ problem / views / admin.py
一个函数judge_dir
,用于获得以压缩文件夹形式上传的文件目录——dir。这个函数对于spj为True或False都适用。我做了两种压缩文件夹的方式的测试
- 右键文件夹,点击发送到,选择发送为
压缩(zipped)文件夹
,这种压缩文件夹在python中用zipFile.listname()出来的列表格式如下
['testcase/1.in', 'testcase/1.out', 'testcase/2.in', 'testcase/2.out']
- 使用其他压缩软件压缩出的压缩文件夹,这种压缩文件夹在python中用zipFile.listname()出来的列表格式如下
['testcase/', 'testcase/1.in', 'testcase/1.out', 'testcase/2.in', 'testcase/2.out']
并且testcase/
在列表中的位置似乎不固定。
以上这是我增加功能时碰到的坑。
3.修复过程
由于我不是专门写python的,本地没有Django的环境。所以我是每改一次代码就用容器部署到远端测试的。因此为了加速oj镜像的构建,我修改Dockerfile中的
RUN curl -L $(curl -s https://api.github.com/repos/QingdaoU/OnlineJudgeFE/releases/latest | grep /dist.zip | cut -d '"' -f 4) -o dist.zip && \
unzip dist.zip && \
rm dist.zip
为
RUN curl -L https://opensoftware.oss-cn-hangzhou.aliyuncs.com/dist.zip -o dist.zip && \
unzip dist.zip && \
rm dist.zip
事实上我将OnlineJudgeFE项目的release的oj_2.6.1(当前最新)版本发布的dist文件,传到了阿里云上以加速镜像构建。然后打包了镜像发布到了我的阿里云镜像仓库,所以我也修改了OnlineJudgeDeploy项目中的docker-compose.yml,将oj-backend镜像换成我打包后的镜像,然后用docker-compose构建。
4.修复效果
对于2
中提到的两种压缩文件夹方式均可正常工作,并且兼容原来的压缩文件方式。
5. 如何重现修复效果
为了下载方便,仓库放在Gitee上,PR将在Github上提
OnlineJudgeDeploy 按照README.md的步骤来部署就可以了
或者你可以直接访问测试网站,来检测效果,密码可以联系我。
貌似必要性不大?
貌似必要性不大?
我一开始因为这个问题找了好久,感觉对于新用户来说体验会好一点。
@ayang818 你好,请教一下,为什么按照文档上的步骤压缩的zip包上传始终提示Empty file呢?昨天把项目克隆到本地,慢慢研究才定位到~/problem/views/admin.py
(我不懂python)。研究了半天我看不懂问题所在。
以下是我的zip内容结构,如果可以,麻烦帮忙瞅瞅,十分感谢!~
% unzip -v testcase.zip
Archive: testcase.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
4 Stored 4 0% 05-25-2020 17:12 55214233 testcase/1.in
2 Stored 2 0% 05-25-2020 17:12 55679ed1 testcase/1.out
-------- ------- --- -------
6 6 0% 2 files
@ayang818 你好,请教一下,为什么按照文档上的步骤压缩的zip包上传始终提示Empty file呢?昨天把项目克隆到本地,慢慢研究才定位到
~/problem/views/admin.py
(我不懂python)。研究了半天我看不懂问题所在。 以下是我的zip内容结构,如果可以,麻烦帮忙瞅瞅,十分感谢!~% unzip -v testcase.zip Archive: testcase.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 4 Stored 4 0% 05-25-2020 17:12 55214233 testcase/1.in 2 Stored 2 0% 05-25-2020 17:12 55679ed1 testcase/1.out -------- ------- --- ------- 6 6 0% 2 files
单单选择两个文件 1.out
2.out
做压缩就行了。选择这两个文件所在的文件夹做压缩是会出现这个错误的。
@ayang818 你好,请教一下,为什么按照文档上的步骤压缩的zip包上传始终提示Empty file呢?昨天把项目克隆到本地,慢慢研究才定位到
~/problem/views/admin.py
(我不懂python)。研究了半天我看不懂问题所在。 以下是我的zip内容结构,如果可以,麻烦帮忙瞅瞅,十分感谢!~% unzip -v testcase.zip Archive: testcase.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 4 Stored 4 0% 05-25-2020 17:12 55214233 testcase/1.in 2 Stored 2 0% 05-25-2020 17:12 55679ed1 testcase/1.out -------- ------- --- ------- 6 6 0% 2 files
单单选择两个文件
1.out
2.out
做压缩就行了。选择这两个文件所在的文件夹做压缩是会出现这个错误的。
感谢!正好在隔壁issue看到类似的。 #138