【发布时间】:2019-12-16 16:18:11
【问题描述】:
我正在使用 asp classic 并使用类似 Web 服务器的 IIS。 我必须从 html 网页发送文件(使用输入文件)。 问题是当我在文件名中有特殊字符时。 例如:当文件的名称是“Distribución de tareas para desarrollo.docx”并且名称到达服务器时,如“Distribución de tareas para desarrollo.docx” 这是我的html头代码。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我尝试使用 html 代码和 asp 代码中的字符集,但它不起作用。
现在按照用户@Daniel Nordh 的建议添加这些行。
`
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>
` 但是,结果是一样的。
好吧,看来我正面临着严重的问题。 我知道从浏览器发送输入文件时,数据以二进制文件形式到达。 一旦我分离了标题,我就会看到文件到达服务器,它会执行以下操作。
--------------7e33a72830078c 内容处置:表单数据;名称=“文档”; filename="Distribución de tareas para desarrollo.docx" 内容类型:application/vnd.openxmlformats-officedocument.wordprocessingml.document PK
读名字的方式和我得到的一样。
但是如果我在 asp 的同一页面上写下面的代码。
response.write "<br>panificación<br>"
请求页面时显示。 恐慌。
我正在考虑的是我有问题,因为它是作为二进制文件发送的输入文件。
用于发送文件的 HTML 表单。
<form method="post" action="files.asp" target="_blank"
enctype="multipart/form-data">
<div class="group-form">
<div class="input-group">
<input accept=".doc,.docx" type="file" name="archivo">
<span class="input-group-addon" >doc (opcional)</span>
</div>
</div>
</form>
这里是处理收到的文件的代码。 变量和 cmets 是西班牙语。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>
<%
dim v_recordset
dim v_arreglo_archivos
dim v_archivo
dim v_bytes
dim v_posicion_limite
dim v_datos_binarios
dim v_longitud_binaria
dim v_agregar_lvc
dim v_datos_completos
dim v_inicio_archivo
dim v_final_archivo
dim v_cadena_delimitadora
dim v_datos_archivo
dim v_inicio_nombre
dim v_fin_nombre
dim v_cadena_nombre_archivo
dim v_pos_temp
dim v_pos_previa
dim v_nombre_archivo
dim v_content_type
dim v_inicio_datos
dim v_fin_datos
dim v_longitud_datos
dim v_file_object
dim v_creador_archivos
dim v_datos_enviados
dim v_cantidad_archivos_subidos
dim v_bandera_archivo_lleno
set v_recordset=CreateObject("ADODB.Recordset")
on error resume next
v_agregar_lvc=201
v_cantidad_archivos_subidos=0
v_bytes=request.totalBytes
v_datos_binarios=request.BinaryRead(v_bytes)
v_longitud_binaria=LenB(v_datos_binarios)
if v_longitud_binaria>0 then
v_recordset.Fields.Append "mi_binario",v_agregar_lvc,v_longitud_binaria
v_recordset.Open
v_recordset.AddNew
v_recordset("mi_binario").AppendChunk v_datos_binarios
v_recordset.Update
v_datos_completos=v_recordset("mi_binario")
end if
v_encabezado=request.ServerVariables("HTTP_CONTENT_TYPE")
v_posicion_limite=instr(1,v_encabezado,"boundary=") + 8
v_cadena_delimitadora= right(v_encabezado,len(v_encabezado)- v_posicion_limite)
v_cadena_delimitadora="--" &v_cadena_delimitadora
v_inicio_archivo=instr(1,v_datos_completos,v_cadena_delimitadora)
v_final_archivo=instr(v_inicio_archivo+1,v_datos_completos,
v_cadena_delimitadora)-1
do while v_final_archivo>0
v_datos_archivo=mid(v_datos_completos,v_inicio_archivo,v_final_archivo -
v_inicio_archivo)
v_inicio_nombre=instr(1,v_datos_archivo,"filename=")+10
v_fin_nombre=instr(v_inicio_nombre,v_datos_archivo,chr(34))
v_datos_completos=replace(v_datos_completos,v_datos_archivo,"")
if v_inicio_nombre=v_fin_nombre then
v_bandera_archivo_lleno=false
do while not v_bandera_archivo_lleno
v_inicio_archivo=instr(1,v_datos_completos,
v_cadena_delimitadora)
v_final_archivo=instr(v_inicio_archivo+1,v_datos_completos,
v_cadena_delimitadora)-1
v_datos_archivo=mid(v_datos_completos,v_inicio_archivo,
v_final_archivo - v_inicio_archivo)
v_inicio_nombre=instr(1,v_datos_archivo,"filename=")+10
v_fin_nombre=instr(v_inicio_nombre,v_datos_archivo,chr(34))
if v_inicio_nombre<>v_fin_nombre then
v_bandera_archivo_lleno=true
end if
v_datos_completos=replace(v_datos_completos,v_datos_archivo,"")
loop
end if
if v_inicio_nombre<>v_fin_nombre then
v_cadena_nombre_archivo=mid(v_datos_archivo,v_inicio_nombre,
v_fin_nombre - v_inicio_nombre)
v_pos_temp=instr(1,v_cadena_nombre_archivo,"\")
do while v_pos_temp>0
v_pos_previa=v_pos_temp
v_pos_temp=instr(v_pos_previa+1,v_cadena_nombre_archivo,"\")
loop
v_nombre_archivo=right(v_cadena_nombre_archivo,
len(v_cadena_nombre_archivo) - v_pos_temp)
v_content_type=instr(1,v_datos_archivo,"Content-type:")
if v_content_type>0 then
v_inicio_datos=instr(v_content_type,v_datos_archivo,chr(13)&chr(10))
+ 4
else
v_inicio_datos=v_fin_nombre
end if
v_fin_datos=len(v_datos_archivo)
v_longitud_datos=v_fin_datos - v_inicio_datos
v_datos_enviados=mid(v_datos_archivo,v_inicio_datos,v_fin_datos)
end if
v_inicio_archivo=instr(1,v_datos_completos,v_cadena_delimitadora)
v_final_archivo=instr(v_inicio_archivo+1,v_datos_completos,
v_cadena_delimitadora)-1
loop
好的。获取内容后,将其保存在服务器上。但那是其他不会给我带来麻烦的事情。
【问题讨论】:
标签: html iis asp-classic