Winform文件上传示例与解决501错误方法
需积分: 3 104 浏览量
更新于2024-12-19
收藏 34KB DOCX 举报
在Windows Form应用程序中进行文件上传操作时,遇到501错误通常是由于缺少正确的MIME类型支持和目标文件夹的写权限。本文提供了一个名为`WinFileTransporter`的类,用于简化这个过程。该类包含两个主要方法:`UpLoadFile`和一个带默认参数的重载版本。
首先,为了成功上传文件,你需要确保IIS服务器上的WebDev扩展已启用。这是因为WebClient API在与服务器通信时可能依赖于这些扩展来识别不同类型的文件。在IIS管理器中,你需要配置MIME类型映射,为常见的文件格式如HTML、TXT、GIF、JPEG、音频和视频等添加对应的MIME类型,以便服务器能够正确处理这些文件类型。具体步骤包括:
1. 打开IIS服务扩展中的WebDev。
2. 在IIS站点中添加或修改MIME类型,例如添加`.html`对应`text/html`,`.txt`对应`text/plain`等。
3. 配置目标文件夹为可写,以便接收上传的文件。
`WinFileTransporter`类中的`UpLoadFile`方法有两个版本,一个接受两个参数:文件的全路径路径`fileNamePath`和服务器文件夹路径`uriString`。这两个版本的区别在于第二个版本有一个布尔标志,用于决定是否自动重命名上传的文件。当你调用`UpLoadFile`方法时,首先要实例化`WebClient`对象,然后使用它的`UploadFile`方法将本地文件发送到指定的服务器路径。
以下是一个简化的`UpLoadFile`方法实现:
```csharp
public void UpLoadFile(string fileNamePath, string uriString, bool autoRename = false)
{
WebClient client = new WebClient();
try
{
if (autoRename)
{
// 自动重命名文件,原文件名可能已被服务器占用
string newName = Path.GetFileNameWithoutExtension(fileNamePath) + "_" + DateTime.Now.Ticks.ToString() + Path.GetExtension(fileNamePath);
string serverFilePath = Path.Combine(uriString, newName);
}
else
{
serverFilePath = uriString;
}
// 检查目标路径的写权限
if (!Directory.Exists(Path.GetDirectoryName(serverFilePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(serverFilePath));
if (!Directory.Exists(serverFilePath)) // 如果目录创建后文件夹还是不可写,再次检查
throw new UnauthorizedAccessException("目标文件夹无写权限");
}
// 开始上传
client.UploadFile(fileNamePath, serverFilePath);
Console.WriteLine($"文件 {fileNamePath} 已上传到 {serverFilePath}");
}
catch (Exception ex)
{
Console.WriteLine($"上传文件时发生错误:{ex.Message}");
}
finally
{
client.Dispose(); // 释放资源
}
}
```
这段代码的核心是通过`WebClient`的`UploadFile`方法将本地文件上传到指定的服务器路径。如果设置了`autoRename`参数,它会为文件添加一个时间戳以避免文件名冲突。同时,代码还检查了目标文件夹的写权限,并在必要时创建目录。在整个过程中,异常处理用于捕获可能出现的问题并给出相应的错误提示。
通过使用这个`WinFileTransporter`类,开发人员可以方便地在Windows Form应用程序中实现文件上传功能,确保服务器端正确识别文件类型并确保文件能够被安全保存。
2020-05-15 上传
2020-03-16 上传
2020-03-11 上传
2010-01-18 上传
2019-12-12 上传
134 浏览量
2018-03-07 上传
2009-11-26 上传
2021-03-16 上传
hehe4
- 粉丝: 0
- 资源: 2
最新资源
- Java毕业设计项目:校园二手交易网站开发指南
- Blaseball Plus插件开发与构建教程
- Deno Express:模仿Node.js Express的Deno Web服务器解决方案
- coc-snippets: 强化coc.nvim代码片段体验
- Java面向对象编程语言特性解析与学生信息管理系统开发
- 掌握Java实现硬盘链接技术:LinkDisks深度解析
- 基于Springboot和Vue的Java网盘系统开发
- jMonkeyEngine3 SDK:Netbeans集成的3D应用开发利器
- Python家庭作业指南与实践技巧
- Java企业级Web项目实践指南
- Eureka注册中心与Go客户端使用指南
- TsinghuaNet客户端:跨平台校园网联网解决方案
- 掌握lazycsv:C++中高效解析CSV文件的单头库
- FSDAF遥感影像时空融合python实现教程
- Envato Markets分析工具扩展:监控销售与评论
- Kotlin实现NumPy绑定:提升数组数据处理性能