『壹』 求ASP.NET WEB项目文件夹上传下载解决方案
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。
下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。
ASP.NET页面设计:TextBox和Button按钮。
TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实现选择文件夹的问题还没有解决,暂时只能手动输入。
两种方法:生成rar和zip。
1.生成rar
using Microsoft.Win32;
using System.Diagnostics;
protected void Button1Click(object sender, EventArgs e)
{
RAR(@"E:95413594531GIS", "tmptest", @"E:95413594531");
}
///
///压缩文件
///
///需要压缩的文件夹或者单个文件
///生成压缩文件的文件名
///生成压缩文件保存路径
///
protected bool RAR(string DFilePath, string DRARName,string DRARPath)
{
String therar;
RegistryKey theReg;
Object theObj;
String theInfo;
ProcessStartInfo theStartInfo;
Process theProcess;
try
{
theReg = Registry.ClassesRoot.OpenSubKey(@"ApplicationsWinRAR.exeShellOpenCommand"); //注:未在注册表的根路径找到此路径
theObj = theReg.GetValue("");
therar = theObj.ToString();
theReg.Close();
therar = therar.Substring(1, therar.Length – 7);
theInfo = " a" + " " + DRARName + "" + DFilePath +" -ep1"; //命令 + 压缩后文件名 + 被压缩的文件或者路径
theStartInfo = new ProcessStartInfo();
theStartInfo.FileName = therar;
theStartInfo.Arguments = theInfo;
theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
theStartInfo.WorkingDirectory = DRARPath ; //RaR文件的存放目录。
theProcess = new Process();
theProcess.StartInfo = theStartInfo;
theProcess.Start();
theProcess.WaitForExit();
theProcess.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
///
///解压缩到指定文件夹
///
///压缩文件存在的目录
///压缩文件名称
///解压到文件夹
///
protected bool UnRAR(string RARFilePath,string RARFileName,string UnRARFilePath)
{
//解压缩
String therar;
RegistryKey theReg;
Object theObj;
String theInfo;
ProcessStartInfo theStartInfo;
Process theProcess;
try
{
theReg = Registry.ClassesRoot.OpenSubKey(@"ApplicationsWinRar.exeShellOpenCommand");
theObj = theReg.GetValue("");
therar = theObj.ToString();
theReg.Close();
therar = therar.Substring(1, therar.Length – 7);
theInfo = @" X " + " " + RARFilePath + RARFileName + " " + UnRARFilePath;
theStartInfo = new ProcessStartInfo();
theStartInfo.FileName = therar;
theStartInfo.Arguments = theInfo;
theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
theProcess = new Process();
theProcess.StartInfo = theStartInfo;
theProcess.Start();
return true;
}
catch (Exception ex)
{
return false;
}
}
注:这种方法在在电脑注册表中未找到应有的路径,未实现,仅供参考。
2.生成zip
通过调用类库ICSharpCode.SharpZipLib.dll
该类库可以从网上下载。也可以从本链接下载:SharpZipLib_0860_Bin.zip
增加两个类:Zip.cs和UnZip.cs
(1)Zip.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Collections;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
namespace UpLoad
{
/// <summary>
///功能:压缩文件
/// creator chaodongwang 2009-11-11
/// </summary>
public class Zip
{
/// <summary>
///压缩单个文件
/// </summary>
/// <param name="FileToZip">被压缩的文件名称(包含文件路径)</param>
/// <param name="ZipedFile">压缩后的文件名称(包含文件路径)</param>
/// <param name="CompressionLevel">压缩率0(无压缩)-9(压缩率最高)</param>
/// <param name="BlockSize">缓存大小</param>
public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)
{
//如果文件没有找到,则报错
if (!System.IO.File.Exists(FileToZip))
{
throw new System.IO.FileNotFoundException("文件:" + FileToZip + "没有找到!");
}
if (ZipedFile == string.Empty)
{
ZipedFile = Path.GetFileNameWithoutExtension(FileToZip) + ".zip";
}
if (Path.GetExtension(ZipedFile) != ".zip")
{
ZipedFile = ZipedFile + ".zip";
}
////如果指定位置目录不存在,创建该目录
//string zipedDir = ZipedFile.Substring(0,ZipedFile.LastIndexOf("\"));
//if (!Directory.Exists(zipedDir))
//Directory.CreateDirectory(zipedDir);
//被压缩文件名称
string filename = FileToZip.Substring(FileToZip.LastIndexOf('\') + 1);
System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
ZipEntry ZipEntry = new ZipEntry(filename);
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte[] buffer = new byte[2048];
System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, size);
try
{
while (size < StreamToZip.Length)
{
int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, sizeRead);
size += sizeRead;
}
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
}
}
/// <summary>
///压缩文件夹的方法
/// </summary>
public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)
{
//压缩文件为空时默认与压缩文件夹同一级目录
if (ZipedFile == string.Empty)
{
ZipedFile = DirToZip.Substring(DirToZip.LastIndexOf("\") + 1);
ZipedFile = DirToZip.Substring(0, DirToZip.LastIndexOf("\")) +"\"+ ZipedFile+".zip";
}
if (Path.GetExtension(ZipedFile) != ".zip")
{
ZipedFile = ZipedFile + ".zip";
}
using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))
{
zipoutputstream.SetLevel(CompressionLevel);
Crc32 crc = new Crc32();
Hashtable fileList = getAllFies(DirToZip);
foreach (DictionaryEntry item in fileList)
{
FileStream fs = File.OpenRead(item.Key.ToString());
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(DirToZip.Length + 1));
entry.DateTime = (DateTime)item.Value;
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
zipoutputstream.PutNextEntry(entry);
zipoutputstream.Write(buffer, 0, buffer.Length);
}
}
}
/// <summary>
///获取所有文件
/// </summary>
/// <returns></returns>
private Hashtable getAllFies(string dir)
{
Hashtable FilesList = new Hashtable();
DirectoryInfo fileDire = new DirectoryInfo(dir);
if (!fileDire.Exists)
{
throw new System.IO.FileNotFoundException("目录:" + fileDire.FullName + "没有找到!");
}
this.getAllDirFiles(fileDire, FilesList);
this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);
return FilesList;
}
/// <summary>
///获取一个文件夹下的所有文件夹里的文件
/// </summary>
/// <param name="dirs"></param>
/// <param name="filesList"></param>
private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)
{
foreach (DirectoryInfo dir in dirs)
{
foreach (FileInfo file in dir.GetFiles("*.*"))
{
filesList.Add(file.FullName, file.LastWriteTime);
}
this.getAllDirsFiles(dir.GetDirectories(), filesList);
}
}
/// <summary>
///获取一个文件夹下的文件
/// </summary>
/// <param name="strDirName">目录名称</param>
/// <param name="filesList">文件列表HastTable</param>
private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)
{
foreach (FileInfo file in dir.GetFiles("*.*"))
{
filesList.Add(file.FullName, file.LastWriteTime);
}
}
}
}
(2)UnZip.cs
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///解压文件
/// </summary>
using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
namespace UpLoad
{
/// <summary>
///功能:解压文件
/// creator chaodongwang 2009-11-11
/// </summary>
public class UnZipClass
{
/// <summary>
///功能:解压zip格式的文件。
/// </summary>
/// <param name="zipFilePath">压缩文件路径</param>
/// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
/// <param name="err">出错信息</param>
/// <returns>解压是否成功</returns>
public void UnZip(string zipFilePath, string unZipDir)
{
if (zipFilePath == string.Empty)
{
throw new Exception("压缩文件不能为空!");
}
if (!File.Exists(zipFilePath))
{
throw new System.IO.FileNotFoundException("压缩文件不存在!");
}
//解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
if (unZipDir == string.Empty)
unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
if (!unZipDir.EndsWith("\"))
unZipDir += "\";
if (!Directory.Exists(unZipDir))
Directory.CreateDirectory(unZipDir);
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if (directoryName.Length > 0)
{
Directory.CreateDirectory(unZipDir + directoryName);
}
if (!directoryName.EndsWith("\"))
directoryName += "\";
if (fileName != String.Empty)
{
using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
}
}
}
}
}
}
}
以上这两个类库可以直接在程序里新建类库,然后复制粘贴,直接调用即可。
主程序代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using Microsoft.Win32;
using System.Diagnostics;
namespace UpLoad
{
public partial class UpLoadForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "") //如果输入为空,则弹出提示
{
this.Response.Write("<script>alert('输入为空,请重新输入!');window.opener.location.href=window.opener.location.href;</script>");
}
else
{
//压缩文件夹
string zipPath = TextBox1.Text.Trim(); //获取将要压缩的路径(包括文件夹)
string zipedPath = @"c:emp"; //压缩文件夹的路径(包括文件夹)
Zip Zc = new Zip();
Zc.ZipDir(zipPath, zipedPath, 6);
this.Response.Write("<script>alert('压缩成功!');window.opener.location.href=window.opener.location.href;</script>");
//解压文件夹
UnZipClass unZip = new UnZipClass();
unZip.UnZip(zipedPath+ ".zip", @"c:emp"); //要解压文件夹的路径(包括文件名)和解压路径(temp文件夹下的文件就是输入路径文件夹下的文件)
this.Response.Write("<script>alert('解压成功!');window.opener.location.href=window.opener.location.href;</script>");
}
}
}
}
本方法经过测试,均已实现。
另外,附上另外一种上传文件方法,经测试已实现,参考链接:http://blog.ncmem.com/wordpress/2019/11/20/net%e4%b8%8a%e4%bc%a0%e5%a4%a7%e6%96%87%e4%bb%b6%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/
『贰』 java WEB项目文件夹上传下载求思路
大概思路就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数
『叁』 java web 本地端上传文件到服务器端
Web文件上传采用POST的方式,与POST提交表单不同的是,上传文件需要设置FORM的enctype属性为multipart/form-data.由于上传的文内件会比较大,容因此需要设置该参数指定浏览器使用二进制上传。如果不设置,enctype属性默认为application/x-www-form-urlencoded,使用浏览器将使用ASCII向服务器发送数据,导致发送文件失败。上传文件要使用文件域(<input type='file'/>,并把FORM的Enctype设置为multipart/form-data.
『肆』 求JAVA WEB项目文件夹上传下载方法
两种实现方式,一种是借助FTP服务器实现上传下载,引入相应的jar包,直接拷贝网内上现成的代码容,另一种通过原生的代码,读取文件夹及里面的文件,通过io流处理,存放到指定地址,或数据库设计一个大字段,存放二进制流数据
『伍』 如何把web项目放到网上
1.开发Web项目创建WEB项目开发完毕本地部署局域网通过IP访问WEB项目Localhost访问WEB项目2.网站所属要的条件域名服务器、虚拟主机网站程序3.域名域名 :域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。域名是一个IP地址上有“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站,电子邮件,FTP等)。域名解析:域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。域名注册:域名注册 域名注册是Internet中用于解决地址对应问题的一种方法。域名注册遵循先申请先注册原则,管理机构对申请人提出的域名是否违反了第三方的权利不进行任何实质审查。每个域名都是独一无二的,不可重复的。4.虚拟主机配置虚拟主机项目部署到虚拟主机5.把Web项目放到网上服务器上配置虚拟主机绑定域名域名解析部署项目网站建设相关知识服务器=pc
『陆』 怎么将文件上传到一个web服务器
web 就是说你的网站网址 或者地址·这个地址·你要是有web服务器的话·就会自动给你分配一个地址的·你登陆服务商的网站查看下·即可
『柒』 求一段可在web项目中上传文件的Java代码
就象发邮件时选择附件的那样的就行。上传后的文件存放在/doc下面,其路径/doc/filename存放于数据库中。对文件的说明同时存放于数据库中。
『捌』 求JAVA WEB项目文件夹上传下载代码
简单谈一下关于文件上传几个步骤1.创建html页面的submit事件,在input框中type必须要选择filepath,这样专子第一步可以选择要传的文件属2.创建fileservlet类,来对该页面做出响应3.uploadfile类来进行文件上传的逻辑处理,实例文件工厂类对象,然后再从中产生文件对象,来接受上传文件的处理
『玖』 java web怎么实现文件上传到服务器
/*** 上传到本地* @param uploadFile* @param request* @return*/@RequestMapping("/upload")@ResponseBodypublic Map<String, Object> uploadApkFile(@RequestParam("uploadUpdateHistoryName") MultipartFile uploadFile,HttpServletRequest request) {Map<String, Object> map = new HashMap<>();// 上传文件校验,包括上传文件是否为空、文件名称是否为空、文件格式是否为APK。if (uploadFile == null) {map.put("error", 1);map.put("msg", "上传文件不能为空");return map;}String originalFilename = uploadFile.getOriginalFilename();if (StringUtils.isEmpty(originalFilename)) {map.put("error", 1);map.put("msg", "上传文件名称不能为空");return map;}String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);if (extName.toUpperCase().indexOf("APK") < 0) {map.put("error", 1);map.put("msg", "上传文件格式必须为APK");return map;}String path = request.getSession().getServletContext().getRealPath("upload");String fileName = uploadFile.getOriginalFilename();File targetFile = new File(path, fileName);if (!targetFile.exists()) {targetFile.mkdirs();}// 保存String downLoadUrl = null;try {uploadFile.transferTo(targetFile);downLoadUrl = request.getContextPath() + "/upload/" + fileName;map.put("error", 0);map.put("downLoadUrl", downLoadUrl);map.put("msg", "上传文件成功");return map;} catch (Exception e) {e.printStackTrace();map.put("error", 1);map.put("msg", "上传文件失败");return map;}}//上传文件$('#btnUpload').bind('click',function(){//var formdata= $('#uploadForm').serializejsON();var formdata = new FormData($( "#uploadForm" )[0]);$.ajax({url:"upload.do",data:formdata,async: false, cache: false, processData:false,contentType:false,//dataType:'json',type:'post',success:function(value){if(value.error==0){$('#downLoadUrlId').val(value.downLoadUrl);$.messager.alert('提示',value.msg);$('#uploadWindow').window('close');}else{$.messager.alert('提示',value.msg);}}});});<div id="uploadWindow" class="easyui-window" title="apk上传" style="width: 230px;height: 100px" data-options="closed:true"><form id="uploadForm" enctype="multipart/form-data"><td><input type ="file" style="width:200px;" name = "uploadUpdateHistoryName"></td> </form><button id="btnUpload" type="button">上传Apk</button></div>java js html
『拾』 JAVA WEB项目大文件上传下载求思路
现在大多提供填报功能的报表工具都会提供上传下载组件,可以直接使用报表工具做张填报表添加这样的控件就可以实现这样的功能。
具体实现可以参考下:如何实现文件(附件)的上下载