我正在编写一个网络,它获取
.csv
或 .xlsx
数据集,对其进行处理,然后使用 Django
将其返回给用户。我应该说它在本地主机上运行正常。但不在真实服务器中。
views.py 用于创建项目并接收文件:
from django.core.files.storage import FileSystemStorage
def create_prject(request):
if request.method == 'POST':
user = request.user
name = request.POST.get('pname')
data = request.FILES['data']
frequency = request.POST.get('frequency')
unit = request.POST.get('unit')
fs = FileSystemStorage(location=f'Media/Projects/{user}')
filename = fs.save(data.name, data)
dataurl = f'/Media/Projects/{user}/{filename}'
header = request.POST.get('header')
if header is not None:
Project.objects.create(ProUser=user, Name=name, Data=filename, DataURL=dataurl,
Header=True, Frequency=str(frequency), Unit=unit)
else:
Project.objects.create(ProUser=user, Name=name, Data=filename, DataURL=dataurl,
Header=False, Frequency=str(frequency), Unit=unit)
return redirect('dashboard')
处理后我想将文件返回给用户(原始文件和处理后的文件必须可下载)。
views.py处理后:
def process(request):
user = request.user
if not user.is_authenticated:
return redirect('login')
else:
if request.method == 'POST':
# Some Processing Functions and creating the pandas.DataFrame
excel_file = f'Despiked - {project.Name}.xlsx'
dff.to_excel(excel_file, index=False)
fs = FileSystemStorage(location=f'Media/Projects/Despiked/{user}')
filename = fs.save(excel_file, open(excel_file, 'rb'))
os.remove(excel_file)
project.Processed_Data = filename
project.Processed_DataURL = f'/Media/Projects/Despiked/{user}/{filename}'
project.save()
return redirect('dashboard')
下载按钮将显示在模板中。但是当我单击每个文件(原始文件或已处理文件)时,我收到“文件在站点上不可用”错误。虽然它确实存在于 CPanel 的文件管理器中。例如,CPanel 中的 URL 为
/Media/Projects/Despiked/farzad/Despiked - Test File.xlsx
,下载链接 href 相同。我错过了什么?我猜测该文件在某种程度上存在格式错误。
右键单击该按钮并选择“在新选项卡中打开链接” - 如果服务器以这种方式配置,这可能会向您显示真正的错误消息。
过去,如果我没记错的话,如果 Chrome 无法渲染网页或文件,它只会为你下载一个奇怪的文件。现在它给出了这个相当模糊的“文件在站点上不可用”错误,而不是现在只下载格式错误的文件。
也许更好的消息是“此文件存在格式错误。看起来它想要成为 XML(CSV、PDF、XML 等)文件,但它有问题。”