现在可以用HTML提交表单上传文件到java服务器端。但是用C#不太会。请各位大大指教。
应该是用到httpwebrequest类,然后把文件读成二进制流传到java服务端,服务端像接收表单那样接收流。
现在的问题:
1.如何模拟表单
2.如何转换成二进制流
3.如何传文件以及参数ip
最好能给一点详细的代码。
HTML的代码:
[HTML] 纯文本查看 复制代码 <html>
<body>
<form action="http://localhost:8080/radionav/monit/upload" method="post" enctype="multipart/form-data">
<input type="text" name="ip"/><br>
<input type="file" name="file"/><br>
<input type="submit" value="upload"/>
<a >down</a>
</form>
</body>
</html>
JAVA服务端的代码:
[Java] 纯文本查看 复制代码 /**
* 上传图片
* @param ip
* @param filename
* @return
*/
@RequestMapping(value="upload",method=RequestMethod.POST)
@ResponseBody
public String upload( @RequestParam("ip") String ip,
@RequestParam("file") MultipartFile file){
logger.info("file name " + file.getOriginalFilename());
screenShotService.upload(ip, file);
return "success";
}
/**
* 上传截屏
*
* 逻辑:
* 1,把文件转移到存储目录
* 2,生成screenshot对象保存起来
* @param ip
* @param filename
*/
public ScreenShot upload(String ip, MultipartFile file)
{
try {
String localPath = receiveFile(file);
String channel = "testChannel";
String user = "testUser";
if (StringUtils.isNotBlank(localPath)){
//创建对象
ScreenShot ss = new ScreenShot(file.getOriginalFilename(),ip,user,channel,localPath);
//保存到数据库
ss = screenShotRepository.save(ss);
return ss;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private String receiveFile(MultipartFile file) throws IOException {
String path;
//destPath为存储文件的目录地址,目录下文件夹和文件取名由ileUtil.buildNewFileName()完成
String destPath = FileUtil.buildNewFileName(configService.getUploadRootPath() + Const._SPLASH, file.getOriginalFilename());
logger.info("upload file Path is " + file.getOriginalFilename()
+ " dest file name is " + destPath);
//新建一个名为dest的空文件
File dest = new File(destPath);
//把file放到dest的path
file.transferTo(dest);
path = dest.getPath();
return path;
}
public ScreenShot findById(String id) {
return this.screenShotRepository.findOne(id);
}
|