Red de conocimiento informático - Conocimiento informático - Cómo cargar y archivar a través de servicios web

Cómo cargar y archivar a través de servicios web

Con el desarrollo de la tecnología de Internet y el aumento de los requisitos multiplataforma, la aplicación de servicios web se está generalizando cada vez más. No solo necesitamos transmitir información de cadenas a través del servicio web, sino también información de archivos binarios. A continuación, presentaremos cómo descargar archivos del servidor al cliente a través de servicios web y cargar archivos desde el cliente al servidor.

Mostrar y descargar archivos a través de servicios web

El nombre del servicio web que establecimos aquí es GetBinaryFile, que proporciona dos métodos públicos: GetImage() y GetImageType(). El primero devuelve la matriz de bytes del archivo binario y el segundo devuelve el tipo de archivo, donde GetImage(). Este método tiene un parámetro que selecciona el nombre del archivo para mostrar o descargar en el cliente. Aquí, los archivos que mostramos y descargamos no pueden estar en el directorio virtual. La ventaja de este método es que los archivos se pueden mostrar y descargar según los permisos. Como se puede ver en el método siguiente, la ubicación real del archivo no está en el directorio virtual. Esto permite un mejor control de los permisos de los archivos, lo cual es particularmente útil en situaciones de alta seguridad. En programas ASP anteriores, esto se podía lograr mediante objetos de flujo. Para facilitar las pruebas de los lectores, todos los códigos fuente se enumeran aquí y se presentan y comentan en el código fuente.

Primero, cree un archivo GetBinaryFile * * * x.

Podemos crear un nuevo proyecto C# aspxWebCS en VS NET, luego agregar un nuevo elemento, seleccionar el servicio web y configurar el nombre del archivo en GetBinaryFile a *** x, ingresar el siguiente código en la vista de código , concretamente GetBinaryFile a***xcs.

Usar el sistema;

Usar la colección del sistema;

Usar el modelo de componentes del sistema;

Usar datos del sistema;

Usar diagnósticos del sistema;

Usar el sitio web del sistema;

Usar la interfaz de usuario web del sistema;

Usar el servicio de red del sistema;

Utilice el sistema IO;

Espacio de nombres aspxWebCS

{

///

///Obtenga una descripción resumida del archivo binario

///Nombre del servicio web GetBinaryFile

///Esta función devuelve la matriz de bytes binarios del objeto de archivo en el servidor.

///

[servicio web (namespace=

descripción=use . NET Framework para transferir archivos binarios en servicios web)]

Clase pública GetBinaryFile: Servicio web del sistema WebService

{

#Código generado por el diseñador de componentes del área

//Para //Se requiere el Diseñador de servicios web

Componente IContainer privado = null

///

///Limpiar todos los recursos en uso.

///

Anulación protegida void Dispose( bool disposing)

{

if (dispose & amp& amp componente! = vacío )

{

Disposición de componentes();

}

Disposición base(eliminación);

}

#End area

Imagen de clase pública: Sistema Servicio Web Servicio Web

{

///

///El método proporcionado por el servicio web devuelve la matriz de bytes del archivo dado.

///

[método web (descripción = el método proporcionado por el servicio web devuelve la matriz de bytes del archivo dado)]

Byte público[] GetImage (String requestFileName)

{

///Obtiene la imagen del servidor.

///Si lo prueba usted mismo, tenga cuidado de modificar la ruta física real a continuación.

if(solicitar nombre de archivo == null ||solicitar nombre de archivo ==)

Devolver getBinaryFile(D:\PictureJPG);

Otros

p>

Devuelve getBinaryFile(D:\+solicitar nombre de archivo);

}

///

/// getBinaryFile devuelve la matriz de bytes de ruta de archivo dada.

///

///

byte público[] getBinaryFile(nombre de archivo de cadena)

{

Si (el archivo existe (nombre de archivo))

{

Intente

{

///Abra un archivo existente para leer.

FileStream s = File OpenRead(nombre de archivo);

Devolver ConvertStreamToByteBuffer

}

Capturar (Excepción e)

{

Devuelve nuevo byte[];

}

}

Otros

{

Devuelve nuevo byte[];

}

}

///

/// /ConvertStreamToByteBuffer Convierte la secuencia de archivos dada en una matriz de bytes binarios.

///

///

byte público[]ConvertStreamToByteBuffer (flujo de flujo de E/S del sistema)

{

int b;

Flujo de memoria de E/S del sistema tempStream =nuevo flujo de memoria de E/S del sistema();

while((b =theStream ReadByte())!= )

{

tempStream escribe byte((byte)b));

}

Devuelve tempStream a matriz();

}

[webmethod(descripción = el método proporcionado por el servicio web devuelve el tipo de archivo dado)]

Cadena pública GetImageType()

{

///Esto es sólo una prueba. Puede generar dinámicamente según el tipo de archivo real.

Devolver imágenes/jpg;

}

}

}

}

Mire la dirección e ingrese al grupo de discusión para discutir.

Una vez que creamos un archivo ***x arriba y lo compilamos, podemos escribir código de cliente para llamar a este servicio web.

Primero agregamos una referencia web e ingresamos el siguiente archivo intermedio GetBinaryFileShow aspx, que es el archivo de visualización. Aquí solo necesitamos escribir código en código postal para obtener BinaryFileShow aspx cs. El contenido del archivo es el siguiente.

Usar el sistema;

Usar la colección del sistema;

Usar el modelo de componentes del sistema;

Usar datos del sistema;

Usar el dibujo del sistema;

Usar el sitio web del sistema;

Usar el estado de sesión web del sistema;

Usar la interfaz de usuario web del sistema;

Usar controles web de la interfaz de usuario web del sistema;

Usar controles HTML de la interfaz de usuario web del sistema

Usar servicios de red del sistema;

Espacio de nombres aspxWebCS

{

///

/// Descripción resumida de GetBinaryFileShow

///

Clase pública GetBinaryFileShow: Sistema Web Página de interfaz de usuario

{

Page_Load vacío privado (sistema remitente de objetos EventArgs e)

{

//Coloque el código de usuario aquí para inicializar página.

///Definir e inicializar objetos de archivo

aspx webcs GetBinaryFile Images oImage;

oImage = new aspx webcs GetBinaryFile Images();

///Obtener la matriz de bytes del archivo binario

byte[]image = oImage GetImage();

///Convertir a una secuencia que admita almacenamiento de memoria.

Flujo de memoria de IO del sistema memStream = nuevo flujo de memoria de IO del sistema (imagen)

///Definir y crear instancias de objetos de mapa de bits

Bitmap bm = nuevo mapa de bits (); memStream);

/// Salida o descarga según diferentes condiciones.

Respuesta a Clear();

///Si la cadena de solicitud especifica descarga, descargue el archivo.

///En caso contrario se mostrará en el navegador.

if(Request QueryString[Download]==)

{

Búfer de respuesta = verdadero

Tipo de contenido de respuesta = aplicación/Octeto stream;

///El nombre del archivo descargado y generado aquí es jpg como ejemplo. De hecho, puedes decidir dinámicamente según la situación.

Respuesta AddHeader(contenido adjunto de procesamiento; nombre de archivo = ok jpg);

}

Otros

tipo de contenido de respuesta = oImage GetImageType( );

Respuesta binaria write(imagen);

Respuesta final();

}

#Diseñador de formularios web regional Código generado.

anula el vacío protegido OnInit(EventArgs e)

{

//

// CODEGEN esta llamada es obligatoria para el formulario ASP NEeb diseñador.

//

inicializar componente();

base en init(e);

}

///

///El diseñador admite los métodos requeridos, por lo que no utilice el editor de código para modificarlos.

///Contenido de este método

///

Private void InitializeComponent()

{

esta carga += nuevo sistema EventHandler(esta página _ carga

}

#End area

}

}

Finalmente escribiremos la página de navegación final GetBinaryFile aspx, que es muy simple y solo requiere el archivo aspx. El contenido es el siguiente.

& lt% @ Idioma de la página = " c# " código detrás = " getbinaryfile . aspx . cs " AutoEventWireup = " false "

Inherits="aspxWebCS.GetBinaryFile " % & gtinherits = aspx webcs GetBinaryFile % & gt;

runat = server & gtrunat = server & gtDescargar archivo

Dirección de la colección: ingrese a la discusión del grupo de discusión

Utilice el sistema;

Usar colecciones del sistema;

Usar modelos de componentes del sistema;

Usar datos del sistema;

Usar diagnósticos del sistema;

Usar el sitio web del sistema;

Usar el servicio de red del sistema;

Usar IO del sistema;

Espacio de nombres aspxWebCS

{

///

///Descripción resumida de la carga

///

[servicio web(namespace=

Descripción = Cargar archivos en un servicio web usando .NET framework]

Carga de clase pública: Servicio web del sistema Servicio web

{

Carga pública()

{

//El diseñador de servicios CODEGEN ASP NEeb requiere esta llamada

initialize componente();

}

. #Código generado por el diseñador del componente del área

//Requerido para //Diseñador de servicios web

componente IContainer privado = null

/ //

///El diseñador admite los métodos requeridos, así que no utilice el editor de código para modificarlos

///El contenido de este método

///

Private void InitializeComponent()

{

}

///

// / Limpiar todos los recursos en use

///

Anulación protegida void Dispose( bool disposing)

{

if (dispose & amp& amp componentes!= null)

{

Dispose del componente();

}

Dispose base (dispose);

}

#End area

[método web (descripción = el método proporcionado por el servicio web devuelve si el archivo se cargó correctamente)]

Carga de cadena pública archivo (byte[] fs nombre de archivo de cadena)

{

Probar

{

// /Definir y crear una instancia de un flujo de memoria para almacenar la matriz de bytes enviada.

MemoryStream m = nuevo flujo de memoria (fs);

///Define el objeto de archivo real para guardar el archivo cargado.

FileStream f = nueva secuencia de archivos (ruta de mapeo del servidor () + \

+nombre de archivo FileMode Create);

///Convierte los datos en la memoria Escribir en un archivo físico.

m escribir a(f);

m Cerrar();

f Cerrar()

f = vacío; /p>

m = vacío;

El archivo devuelto se ha cargado correctamente

}

catch (excepción)

<; p> {

Devolver ex mensaje;

}

}

}

}

Usar el sistema;

Usar la colección del sistema;

Usar el modelo de componentes del sistema;

Usar datos del sistema;

Usar el dibujo del sistema ;

Usar el sitio web del sistema;

Usar el estado de sesión web del sistema;

Usar la interfaz de usuario web del sistema;

Usar el interfaz de usuario web del sistema control web;

Utilice la interfaz de usuario web del sistema HtmlControls

Utilice el servicio de red del sistema;

Utilice el IO del sistema;

Espacio de nombres aspxWebCS

{

///

///Descripción resumida de la carga

///Usa esto Método para subir archivos a través de un servicio web.

///

Carga de clases públicas: página de interfaz de usuario web del sistema

{

La interfaz de usuario web del sistema protegida controla html el archivo de entrada html my file;

Botón de controles web de la interfaz de usuario web del sistema protegido;

Página vacía privada_Load(Object Remitente System EventArgs e)

{

/ /Coloque el código de usuario aquí para inicializar la página.

}

#Código generado por el Diseñador de formularios web regional

Anular el vacío protegido OnInit(EventArgs e)

{

//

// CODEGEN Esta llamada es requerida por el diseñador de formularios ASP NEeb.

//

inicializar componente();

base en init(e);

}

///

///El diseñador admite los métodos requeridos, por lo que no utilice el editor de código para modificarlos.

///Contenido de este método

///

Private void InitializeComponent()

{

Haga clic en este botón +=nuevo controlador de eventos del sistema (este botón_Click);

esta carga +=nuevo manejador de eventos del sistema(esta página_carga);

}

# Área final

Botón de anulación privada _Haga clic (sistema remitente de objetos EventArgs e)

{

///Primero obtenga la información del archivo cargado y los flujos de archivos.

if(MyFile PostedFile!=null)

{

Colección de archivos de archivos http de System Web;

oFiles = System Web HttpContext actual Solicitar archivos;

if(of files Count & lt;)

{

Responder para escribir (seleccione un archivo);

respuesta final();

}

ruta del archivo de cadena = de archivos[]NombreDeArchivo;

if(FilePath == || FilePath == null)

{

Responder para escribir (seleccione un archivo);

Fin de respuesta();

}

string FileName = ruta del archivo Substring(ruta del archivo LastIndexOf(\)+);

Intenta

{

///Procesando la información del flujo de archivos cargados

byte[] b =nuevo byte[oFiles[]ContentLength];

Flujo de E/S del sistema fs;

carga de aspxWebCS o;

o = new aspx webcs Upload();

fs = (flujo de E/S del sistema) de archivos[]InputStream;

fs Read(b de archivos[]longitud del contenido);< / p>

/// Llame al método UploadFile del servicio web para cargar el archivo.

Respuesta escribir(o UploadFile(b FileName));

fs Close()

}

catch(excepción ex)

{

Redacción de respuestas (ex mensaje);

}

}

Otros

;

{

Responder (seleccione un archivo);

}

}

}

}

Una nota final es que al guardar un archivo, debe asegurarse de especificar la ruta completa al archivo (por ejemplo, C:\myfilespacture.jpg ) y proporcionar acceso al directorio de almacenamiento del archivo para el archivo. cuenta utilizada por el permiso de escritura ASP.NET. Al cargar archivos grandes, puede usar el atributo maxRequestLength del elemento para aumentar el tamaño máximo de archivo permitido, donde maxReques. TLength representa el número máximo de bytes admitidos por ASP NET para la carga HTTP. Este límite se puede utilizar para evitar ataques de denegación de servicio causados ​​por usuarios que pasan una gran cantidad de archivos a este servidor. El tamaño especificado está en KB, el valor predeterminado es KB (MB). ExecutionTimeout indica la cantidad máxima de segundos que se permite ejecutar una solicitud antes de que ASP.NET la cierre automáticamente. Si se produce un error de DNS en el navegador o el servicio no está disponible cuando el archivo excede el tamaño especificado, modifique la configuración anterior para aumentar la cantidad de configuraciones.

Además, al cargar archivos de gran tamaño, es posible que recibas el siguiente mensaje de error.

aspnet_WP.exe(PID:) se recicló porque el consumo de memoria superó los MB (porcentaje de RAM disponible).

Si encuentra este mensaje de error, aumente el valor del atributo MemoryLimit en el elemento del archivo nfig de su aplicación.

Lishi Xinzhi/Article/program/net/201311/12410