Cómo cargar y descargar archivos a través de servicios web
Con el desarrollo de la tecnología de Internet y la creciente demanda de plataformas cruzadas, la aplicación de servicios web se está generalizando cada vez más. No solo necesitamos transmitir información de cadenas a través de servicios web, sino que también necesitamos hacerlo. transmitir información de archivos binarios. A continuación presentaremos cómo hacerlo por separado. Descargar archivos desde el servidor al cliente a través de servicios web y cargar archivos desde el cliente al servidor a través de servicios web.
Mostrar y descargar archivos a través de. Servicios web
Los servicios web que establecimos aquí. El nombre GetBinaryFile proporciona dos métodos públicos, a saber, GetImage() y GetImageType(). El primero devuelve la matriz de bytes del archivo binario y el segundo devuelve el tipo de archivo. () tiene un parámetro que se utiliza para seleccionar si mostrar o descargar en el cliente. Los nombres de archivos que mostramos y descargamos aquí no necesitan estar en el directorio virtual. La ventaja de usar este método es que los archivos se pueden mostrar y. descargado según los permisos Del siguiente método, podemos ver que la ubicación real del archivo no está en el directorio virtual. Por lo tanto, es posible controlar mejor los permisos de los archivos, lo cual es particularmente útil cuando la seguridad es relativamente alta. Se puede implementar utilizando el objeto Stream en programas ASP anteriores. Para comodidad de los lectores para las pruebas, todos los códigos fuente se enumeran aquí. Introducir y comentar en el código fuente.
Primero cree GetBinaryFile a ***. x file
Podemos crear un nuevo proyecto C# aspxWebCS en VS NET y luego agregar nuevos elementos para seleccionar el servicio web y establecer el nombre del archivo en GetBinaryFile a *** x. código, a saber, GetBinaryFile a *** x cs
Usando el sistema
Usando las colecciones del sistema
Usando el modelo de componentes del sistema; /p>
Uso de datos del sistema
Uso de diagnósticos del sistema
Uso de la Web del sistema
Uso de la interfaz de usuario web del sistema; > Uso de los servicios web del sistema
Uso del sistema IO
espacio de nombres aspxWebCS
{
///
/// Descripción resumida de GetBinaryFile
/// Nombre del servicio web GetBinaryFile
/// Función Devuelve una matriz de bytes binarios de un objeto de archivo en el servidor
///
[WebService(Namespace=
Descripción= Uso de NET Framework en el archivo binario Web Services Pass)]
clase pública GetBinaryFile: Sistema Servicios web WebService
{
#region Código generado por Component Designer
//Requerido para Web Service Designer
private IContainer componentes = null
///
/// Limpiar todos los recursos; en uso
///
anulación protegida void Dispose( bool disposing)
{
if(eliminación de amp; amp;ponents != null)
{
ponentes Dispose();
}
base Dispose(disposing); p> p>
}
#endregion
imágenes de clase pública: Sistema Web Services WebService
{
/// p>
/// El método proporcionado por el servicio web devuelve la matriz de bytes del archivo dado
///
[WebMethod(Descripción= El método proporcionado por el servicio web devuelve una matriz de bytes de un archivo específico)]
public byte[] GetImage(string requestFileName)
{
///Obtener una imagen en el lado del servidor
/// Si lo prueba usted mismo, modifique la ruta física real a continuación
if(requestFileName == null || requestFileName == )
return getBinaryFile( D:\ Imagen JPG
else
return getBinaryFile( D:\requestFileName
}
<); p> ///
/// getBinaryFile devuelve la matriz de bytes de la ruta del archivo dada
///
/ //
byte público[] getBinaryFile(nombre de archivo de cadena)
{
if(El archivo existe (nombre de archivo))
{
try p>
{
///Abrir un archivo existente para leer
FileStream s = File OpenRead(filename); >
return ConvertStreamToByteBuffer( s);
}
catch(Exception e)
{
devuelve nuevo byte[ ] ;
}
}
else
{
devuelve nuevo byte[ ];
}
}
///
/// ConvertStreamToByte
Buffer Convierte la secuencia de archivos dada en una matriz de bytes binarios
///
///
byte público[] ConvertStreamToByteBuffer(System IO Stream theStream )
{
int b;
Sistema IO MemoryStream tempStream = nuevo Sistema IO MemoryStream();
mientras((b = theStream ReadByte ())!= )
{
tempStream WriteByte(((byte)b ));
}
devuelve tempStream ToArray ();
}
[WebMethod(Descripción=El método proporcionado por el servicio web devuelve el tipo de archivo dado)]
public string GetImageType()
{
///Esta es solo una prueba de que puede realizar una salida dinámica de acuerdo con el tipo de archivo real
return image/jpg
;}
}
}
}
Mire la dirección para ingresar a la discusión del grupo de discusión
Una vez que creamos el archivo a***x anterior y lo compilamos, podemos escribir el código del cliente para llamar a estos servicios web
Primero agregamos la entrada de referencia web y luego escribimos en el medio del archivo de visualización Archivo GetBinaryFileShow aspx Aquí solo necesitamos escribir el código en el código postal en GetBinaryFileShow aspx. El contenido del archivo cs es el siguiente
usando System
<; p>usando Colecciones del Sistemausando el Modelo de Componentes del Sistema
usando los Datos del Sistema
usando el Dibujo del Sistema
usando la Web del Sistema;
usando el estado de sesión web del sistema
p>
usando la interfaz de usuario web del sistema
usando los controles web de la interfaz de usuario web del sistema
Controles HTML de la interfaz de usuario web del sistema
Uso de los servicios web del sistema
p>
espacio de nombres aspxWebCS
{
///
/// Descripción resumida de GetBinaryFileShow
///
clase pública GetBinaryFileShow: página de interfaz de usuario web del sistema
{
Página_Load vacía privada(remitente del objeto
System EventArgs e)
{
// Coloque el código de usuario aquí para inicializar la página
///Defina e inicialice el objeto de archivo
aspxWebCS GetBinaryFile Images oImage;
oImage = new aspxWebCS GetBinaryFile Images();
/// Obtener la matriz de bytes del archivo binario
byte[] imagen = oImage GetImage( );
/// Convertir a una secuencia que admita un área de almacenamiento como memoria
System IO MemoryStream memStream = new System IO MemoryStream(imagen);
/// Definir y crear instancias de objetos Bitmap
Bitmap bm = new Bitmap(memStream
/// Salida o descarga según diferentes condiciones
< p); > Response Clear();///Si la cadena de solicitud especifica descargar, descargue el archivo
///De lo contrario, muéstrelo en el navegador
if(Request QueryString[ Download ]== )
{
Búfer de respuesta = true;
Tipo de contenido de respuesta = flujo de aplicación/octeto
/// Descargue el nombre del archivo de salida ok jpg aquí como ejemplo. Puede decidir dinámicamente según la situación real.
Respuesta AddHeader( Adjunto de disposición de contenido; filename=ok jpg
}
else
Respuesta ContentType = oImage GetImageType();
Respuesta BinaryWrite(imagen)
Fin de respuesta; ();
}
#region Código generado por Web Form Designer
anular el vacío protegido OnInit(EventArgs e)
{ p>
//
// CODEGEN Esta llamada es requerida por el diseñador de formularios ASP NEeb
//
InitializeComponent()
base OnInit(e);
}
///
/// El diseñador admite los métodos requeridos. editor para modificarlo
/// Contenido de este método
///
private void InitializeComponent()
{ <. /p>
Esta carga = new System EventHandler(esta página_carga
>
}
#endregion
}
}
Finalmente escribimos la página de navegación final GetBinaryFile aspx. Muy simple, solo necesitas un archivo aspx y el contenido es el siguiente
lt;@ Page language="c#" Codebehind="GetBinaryFile.aspx.cs" AutoEventWireup="false"
Hereda = aspxWebCS .GetBinaryFile" gt; Hereda = aspxWebCS GetBinaryFile gt;
runat= servidor gt; runat= servidor gt descargar
p>
Dirección de la colección: Ingrese al grupo de discusión para la discusión
Usando el sistema
usando colecciones del sistema
p>
usando el modelo de componentes del sistema
usando los datos del sistema
usando el diagnóstico del sistema; >usando System Web
usando los servicios web del sistema
usando System IO
espacio de nombres aspxWebCS
{
///
/ // Descripción resumida de la carga
///
[WebService(Namespace=
Descripción= Utilice el marco NET para cargar archivos en servicios web)]
Carga de clase pública: Servicio web de servicios web del sistema
{
Carga pública()
{
// CODEGEN Esta llamada es necesaria para ASP NEeb Service Designer
InitializeComponent()
}
#; región Código generado por el Diseñador de componentes
//Requerido por el diseñador de servicios web
private IContainer componentes = null
///
/// El diseñador admite los métodos requeridos. No utilice el editor de código para modificar
/// El contenido de este método
///
privado void InicializarComponente
()
{
}
///
/// Limpiar todos los recursos en uso
///
anulación protegida void Dispose( bool disposing )
{
if(eliminación amp; amp; componentes != null)
{
componentes Dispose();
}
base Dispose(eliminación);
}
#endregion
[WebMethod(Descripción= El método proporcionado por el servicio web devuelve si la carga del archivo fue exitosa o no)]
cadena pública UploadFile(byte[] fs string FileName)
p>{
try
{
/// Definir y crear una instancia de un flujo de memoria para almacenar la matriz de bytes enviada
MemoryStream m = new MemoryStream(fs);
///Define el objeto de archivo real para guardar el archivo cargado
FileStream f = new FileStream(Server) MapPath() \
FileName FileMode Create);
/// Escribe los datos en la memoria interna en el archivo físico
m WriteTo(f);
m Cerrar();
f Cerrar();
f = nulo
m = nulo
el archivo devuelto se ha cargado correctamente
}
catch(Exception ex)
{
return ex Message <; /p>
}
}
}
}
usando Sistema ; p>
usando colecciones del sistema;
usando el modelo de componentes del sistema;
usando los datos del sistema;
usando el dibujo del sistema; Web del sistema;
Uso del estado de sesión web del sistema
Uso de la interfaz de usuario web del sistema
Uso de los controles web de la interfaz de usuario web del sistema; UI HtmlControls
Uso de servicios web del sistema
Uso del sistema IO
espacio de nombres aspxWebCS
{
///
/// Resumen de carga
Descripción
/// Utilice este método para cargar archivos a través de servicios web
///
carga de clase pública: página de interfaz de usuario web del sistema
{
UI web del sistema protegido HtmlControls HtmlInputFile MyFile;
Botón UI web del sistema protegido WebControls
Page_Load vacío privado (objeto remitente System EventArgs e)
{
// Coloque el código de usuario aquí para inicializar la página
}
#region Código generado por Web Form Designer
anular el vacío protegido OnInit(EventArgs e)
{
//
// CODEGEN Esta llamada es requerida por el diseñador de formularios ASP NEeb
//
InitializeComponent();
base OnInit(e);
}
/ //
/// El diseñador admite el método requerido. No utilice el editor de código para modificarlo.
/// El contenido de este método.
// /
private void InitializeComponent()
{
clic en este botón = new System EventHandler(este botón _Click
esta carga); = new System EventHandler(this Page_Load);
}
#endregion
Botón vacío privado _Click(objeto remitente System EventArgs e)
{
///Primero obtenga la información del archivo cargado y el flujo del archivo
if(MyFile PostedFile != null)
{
System Web HttpFileCollection oFiles;
oFiles = Archivos de solicitud actuales de System Web HttpContext
if(oFiles Count lt; )
{
Escritura de respuesta (seleccione un archivo);
Fin de respuesta();
}
string FilePath = oFiles[ ] FileName; p>if( FilePath == || FilePath == null)
{
Respuesta de escritura (seleccione un archivo)
Fin de respuesta();
}
cadena NombreDeArchivo = Subcadena FilePath(FilePath LastIndexOf( \ ) <); /p>
intenta
{
///Procesar información de flujo de archivos cargados
byte[] b = nuevo byte[oFiles[ ] ContentLength ]
Flujo de E/S del sistema
Carga de aspxWebCS o;
o = nueva carga de aspxWebCS(); IO Stream)oFiles[ ] InputStream;
fs Read(b oFiles[ ] ContentLength
/// Llame al método UploadFile de servicios web para cargar archivos
<); p>Respuesta Escritura(o UploadFile(b FileName));fs Close()
}
catch(Exception ex)
{
Escritura de respuesta (ex mensaje);
}
}
else
{
Escritura de respuesta (seleccione un archivo
}
}
}
}
Una nota final es que al guardar un archivo debe asegurarse de especificar la ruta completa al archivo (por ejemplo, C:\MyFilesPicture jpg) y asegurarse de que la cuenta utilizada por ASP. NET tiene acceso de escritura al directorio donde se almacenará el archivo. Al cargar archivos grandes, puede usar el atributo maxRequestLength del elemento para aumentar el valor máximo permitido del tamaño del archivo. maxRequestLength indica el número máximo de bytes admitidos. ASP NET para carga HTTP Este límite se puede utilizar para evitar que los usuarios transfieran archivos grandes al servidor. Ataque de denegación de servicio. Tamaño especificado en KB. El valor predeterminado es KB (MB). Tiempo de espera de ejecución Indica el número máximo de segundos que se le permite a una solicitud. ejecutar antes de que ASP.NET lo cierre automáticamente. Si se genera un error de DNS en el navegador cuando el archivo excede el tamaño especificado o si el servicio no está disponible, modifique la configuración anterior para aumentar el número de configuraciones
Además, puede recibir el siguiente mensaje de error al cargar archivos grandes
aspnet_wp exe (PID: ) se recicló porque el consumo de memoria superó los MB (porcentaje de RAM disponible)
Si Si encuentra este mensaje de error, aumente el valor del atributo MemoryLimit en el elemento del archivo nfig de la aplicación lishixinzhi/Article/program/ net/201311/12410