可以用HttpClient把服务器获得的文件流再跨服务器转发到另外一个servlet上面再接收下载吗?
我用uploadify组件做了个文件从客户端上传到服务器的功能,但需求需要我把服务器获得的文件流不要保存到服务器本地直接转存到另外的一台文件服务器上面去。我在网上找了很久都没有这样的例子,请问这样的功能有可能实现吗?我看到网上有人说要把文件先保存到服务器本地,再用HttpClient读出来再转发到文件服务器上面的servlet上面接收,请问是不是一定要这么麻烦呢?求大神指点!
下面这是我在服务器上保存文件的代码,但是需求要我不要保存直接转发到其他服务器上面去:
@RequestMapping(value="/uploadFile")
@SuppressWarnings("unchecked")
public String uploadFile(HttpServletRequest req, Model model){
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (isMultipart) {
String filePath = readproperties.get("infoPublishFilePath");
File dirFile = new File(filePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 10, new File(filePath));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(1024 * 1024 * 500); // 设置允许上传的最大文件大小 500M
List<FileItem> fileItems;
try {
FileItem fileData = null;
fileItems = upload.parseRequest(req);
Iterator<FileItem> iter = fileItems.iterator();
String name = "";
String extName = "";
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) { // 如果item是文件上传表单域
fileData = item;
DateFormat df=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String str=df.format(new Date());
name = str+item.getName();
// System.out.println("文件名11:"+name);
if (name.lastIndexOf(".") >= 0) {
extName = name.substring(name.lastIndexOf("."));
}
}
}
if (fileData != null && !extName.equals("")) {
File fileOnServer = new File(filePath + name);
fileData.write(fileOnServer);
/*Account account = userService.findAccountByAccCode(accCode);
account.setPhotoRes(filePath + fileOnServer.getName());
userService.updateAccount(account);*/
log.info("文件" + fileOnServer.getName() + "上传成功");
model.addAttribute("baseUrl", filePath + name);
model.addAttribute("Message", "OK");
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return this.resolverViewName(req, "uploadFile");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
将文件服务器的磁盘mount到web服务器
可以做代理
引用来自“jobet”的评论
你的文件服务器用的是什么接口.是api接口.还是通过fuse,还是其他??
你的文件服务器用的是什么接口.是api接口.还是通过fuse,还是其他??
引用来自“jobet”的评论
可以实现.
InputStream is=fileItem.getInputStream();
然后直接把流转到你的文件服务器上.不知道你的文件服务器提供的接口.自己看着弄把
引用来自“jobet”的评论
可以实现.
InputStream is=fileItem.getInputStream();
然后直接把流转到你的文件服务器上.不知道你的文件服务器提供的接口.自己看着弄把
可以实现.
InputStream is=fileItem.getInputStream();
然后直接把流转到你的文件服务器上.不知道你的文件服务器提供的接口.自己看着弄把
顶一下,在线等
其实你可以直接上传到文件服务器,只不过要注意跨域的问题