NutzCN Logo
问答 关于文件上传实现更多细节想咨询一下
发布于 2162天前 作者 qq_64f81159 1649 次浏览 复制 上一个帖子 下一个帖子
标签:

我现在想做一个文件上传,因为要考虑部署多台tomcat,所以想把上传后的请求转发到一个统一的文件上传服务中,这样不会出现上传后找不到的问题, 代码如下,目前redirectReq是true 走的是bgUpload方法

private Result commonUpload(TempFile tmpFile){
		Map<String, Object> data = new HashMap<String, Object>();
		try {
			File fromFile = tmpFile.getFile();
			String tmpName = tmpFile.getSubmittedFileName();
			String fileName = "";
			
			if(redirectReq){
				fileName = bgUpload(fromFile);
			}else{
				fileName = generateFileName(tmpName);
				File toFile = new File(uploadPath + fileName);
				if (!toFile.exists()) {
					toFile.getParentFile().mkdirs();
					toFile.createNewFile();
				}
				copyFile(fromFile, toFile);
			}
			data.put("fileName", fileName.replaceAll("\\\\", "/"));
			data.put("orginName", tmpName);
			Attachment attachment = new Attachment();
			attachment.setFileName(fileName);
			attachment.setFileOriginalName(tmpName);
			if (!Lang.isEmpty(getUser()) && !Strings.isEmpty(getUser().getLoginname())) {
				attachment.setUserName(getUser().getLoginname());
			}
			if (!Lang.isEmpty(getUser()) && !Strings.isEmpty(getUser().getLoginIp())) {
				attachment.setUploadIp(getUser().getLoginIp());
			}
			attachment.setFileExtName(getFileType(fileName));
			attachment.setFilePath(uploadPath + fileName);
			attachment.setFileSize(getFileSize(tmpFile));
			attachment.setUrl(downloadUrl + "?name=" + fileName.replaceAll("\\\\", "/"));
			attachmentService.insert(attachment);
			return Result.success("system.upload.success", data);
		} catch (Exception e) {
			e.printStackTrace();
			log.errorf("方法为commonUpload,错误信息为:%s", e);
			return Result.error("system.upload.error");
		}
	}

bgUpload的方法是这样的

private String bgUpload(File file){
		Request req = Request.create(uploadUrl, METHOD.POST);
		Map<String, Object> params = req.getParams();
	    params.put("file", file);
	    FilePostSender sender = new FilePostSender(req);
	    Response resp = sender.send();
	    return resp.getContent();
	}

我想问下这样如果对于大文件,一次性从http输入流中还没有把文件流读完,直接在bgUpload中调用方法把file传递过去是否存在问题?如果有问题该怎么处理?我传递几M图片的时候没有问题,传递接近1个G我这里测试没有问题,但是客户那边上传总是失败,不知道什么原因。

6 回复

能进入口方法的,都是已经upload完成了

客户那里不行,可能是网速问题哦

是这样吗 我怎么感觉不是呢 比如我传1个G的视频,要等1个G的传完了才能进入入口方法?为什么我感觉是上传以后开始进入入口方法呢,没有等那么久啊 ,我等下试下。。应该不是网速问题,是局域网,应该不太可能存在网络抖动的问题。

本地测试上传得快吧

不是本地 部署到自己服务器上上传的 貌似没有问题,这个如果要在前端搞分片上传 后端的UploadAdaptor需要自己实现吗? 在网上看到有分片上传的。不知道能不能解决大文件的问题

分片的话需要自己处理的

这个所说的自己处理是UploadAdaptor还是后端代码呢?

添加回复
请先登陆
回到顶部