O recurso de upload de arquivos é muito útil e requisitado em certos casos quando se fala de sistemas on line. Logo desenvolver algo nesse sentido em nossas aplicações Silverlight pode se tornar necessário, como foi no meu caso, ou de repente apresentar esse recurso para incrementar um projeto também pode ser uma boa idéia.
Irei disponibilizar aqui um ótimo projeto que encontrei no blog do John Mendez, que serviu de base para a minha implementação, colocarei no post apenas a classe do serviço de upload, o projeto completo pode ser encontrado aqui.
1: <%@ WebHandler Language="C#" Class="FileUpload" %>
2:
3: using System;
4: using System.Web;
5: using System.IO;
6: using System.Web.Hosting;
7: using System.Diagnostics;
8:
9: public class FileUpload : IHttpHandler {
10:
11: private HttpContext _httpContext;
12: private string _tempExtension = "_temp";
13: private string _fileName;
14: private string _docType;
15: private bool _lastChunk;
16: private bool _firstChunk;
17: private long _startByte;
18:
19: StreamWriter _debugFileStreamWriter;
20: TextWriterTraceListener _debugListener;
21:
22: public void ProcessRequest(HttpContext context)
23: {
24: _httpContext = context;
25:
26: if (context.Request.InputStream.Length == 0)
27: throw new ArgumentException("No file input");
28:
29: try
30: {
31:
32: GetQueryStringParameters();
33:
34: string uploadFolder = GetUploadFolder();
35: string tempFileName = _fileName + _tempExtension;
36:
37: if (_firstChunk)
38: {
39: //Delete temp file
40: if (File.Exists(@HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + tempFileName))
41: File.Delete(@HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + tempFileName);
42:
43: //Delete target file
44: if (File.Exists(@HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + _fileName))
45: File.Delete(@HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + _fileName);
46:
47: }
48:
49: using (FileStream fs = File.Open(@HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + tempFileName, FileMode.Append))
50: {
51: SaveFile(context.Request.InputStream, fs);
52: fs.Close();
53: }
54:
55: if (_lastChunk)
56: {
57: File.Move(HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + tempFileName, HostingEnvironment.ApplicationPhysicalPath + "/" + uploadFolder + "/" + _fileName);
58: }
59:
60: }
61: catch (Exception e)
62: {
63: throw;
64: }
65:
66: }
67:
68: private void GetQueryStringParameters()
69: {
70: _fileName = _httpContext.Request.QueryString["file"];
71: _docType = _httpContext.Request.QueryString["docType"];
72: _lastChunk = string.IsNullOrEmpty(_httpContext.Request.QueryString["last"]) ? true : bool.Parse(_httpContext.Request.QueryString["last"]);
73: _firstChunk = string.IsNullOrEmpty(_httpContext.Request.QueryString["first"]) ? true : bool.Parse(_httpContext.Request.QueryString["first"]);
74: _startByte = string.IsNullOrEmpty(_httpContext.Request.QueryString["offset"]) ? 0 : long.Parse(_httpContext.Request.QueryString["offset"]); ;
75: }
76:
77: private void SaveFile(Stream stream, FileStream fs)
78: {
79: byte[] buffer = new byte[4096];
80: int bytesRead;
81: while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
82: {
83: fs.Write(buffer, 0, bytesRead);
84: }
85: }
86: protected string GetUploadFolder()
87: {
88: string folder = ""; //System.Configuration.ConfigurationSettings.AppSettings["UploadFolder"];
89:
90: switch (_docType)
91: {
92: case "document":
93: folder = "documents/uploads";
94: break;
95: case "image":
96: folder = "documents/images";
97: break;
98: default:
99: folder = "documents";
100: break;
101: }
102:
103: if (string.IsNullOrEmpty(folder))
104: folder = "documents";
105:
106: return folder;
107: }
108:
109:
110: public bool IsReusable {
111: get {
112: return false;
113: }
114: }
115:
116: }
Olá parceiro, estou aqui avisando sobre a alteração do meu banner, e gostaria de pedir que pegue o novo banner em nosso blog e altere em sua página.
ResponderExcluiratt.
Humor com Risada
www.humorcomrisada.blogspot.com
Pra onde fica o arquivo que fiz upload?
ResponderExcluirOlá anonimo, verifique o método GetUploadFolder.
ResponderExcluir[]s...