Java 服务器接收上传文件

前端

----------------------------------------------------------------------------------html
<view class="button-container-css">
	<uni-file-picker v-model="fileValue" fileMediatype="all" mode="list" class="file-picker-css"
		@select="select" @progress="progress" @success="success" @fail="fail" ref="fileInput">
		<button class="button-css button-css-1">上传日志</button>
	</uni-file-picker>
	<button type="default" plain="true" @click="writeDiary" class="button-css">编辑日志</button>
</view>	
----------------------------------------------------------------------------------methods
// 获取上传状态
select(e) {
	let fileName = e.tempFiles[0].name;
	let temp = fileName.split('.')
	if(temp[1] != "pdf"){
		uni.showToast({
		  title: "只支持上传 pdf 格式文件!",
		  duration: 2000,
		  icon: "none",
		});
		return;
	};
	uni.uploadFile({
		url: uploadPdf,
		filePath: e.tempFilePaths[0],
		name: "file",
		header: {
			accessToken: storage.getAccessToken(),
		},
		success: (uploadFileRes) => {
			console.log(uploadFileRes);
		}
	});
	console.log(uploadPdf)
},

后端

----------------------------------------------------------------------------------controller
@PostMapping("/upload/pdf")
@ApiOperation(value = "上传日志文件")
public ResultMessage<Object> uploadPdf(MultipartFile file, @RequestHeader String accessToken) {
    return ResultUtil.data(diaryService.fileHandler(file,accessToken));
}

----------------------------------------------------------------------------------serviceimpl
// 静态设置,最快三分钟更新一次
private static LocalSetting localSetting;
//下一个初始化配置参数的时间,这里为了防止多次调用redis,减少与redis的交互时间
private static Long nextInitSetting;
// 暂时设定3分账请求一次设置
private static final Long INTERVAL = 60 * 3 * 1000L;
@Autowired
private SettingService settingService;

@Override
public String fileHandler(MultipartFile file, String accessToken) {
    AuthUser authUser = UserContext.getAuthUser(cache, accessToken);
    //如果用户未登录,则无法上传图片
    if (authUser == null) {
        throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
    }
    if (file == null || !file.getContentType().equals("application/pdf") || CharSequenceUtil.isEmpty(file.getContentType())) {
        throw new ServiceException(ResultCode.FILE_TYPE_NOT_SUPPORT);
    }
    //重命令原始文件名字
    String rename = CommonUtil.rename(Objects.requireNonNull(file.getOriginalFilename()));
    LocalSetting ls = getSetting();
    try {
        //保存的路径
        String path = "F:\\DIARY";
        //创建一个缓冲区
        byte[] bs = new byte[1024 * 2];
        //判断输入流中的数据是否已经读完的标识
        int len = 0;
        //获取输入流
        InputStream inputStream = file.getInputStream();
        //创建一个文件输出流
        FileOutputStream fileOutputStream = new FileOutputStream(path + "\\" + rename);
        //循环将输入流读入到缓冲区当中,(len = inputStream.read(bs)) = -1就表示inputStream里面没有数据
        while ((len = inputStream.read(bs)) != -1) {
            //使用fileOutputStream输出流将缓冲区的数据写入到指定的目录中
            fileOutputStream.write(bs, 0, len);
        }
        fileOutputStream.flush();
        fileOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "http://" + ls.getEndPoint() + "/DIARY/" + rename;
}
/**
* 获取配置
 * @return localSetting
 */
private LocalSetting getSetting() {
    //如果没有配置,或者没有下次刷新时间,或者下次刷新时间小于当前时间,则从redis 更新一次
    if (localSetting == null || nextInitSetting == null || nextInitSetting < System.currentTimeMillis()) {
        Setting setting = settingService.get(SettingEnum.LOCAL_SETTING.name());
        if (setting == null || StrUtil.isBlank(setting.getSettingValue())) {
            throw new ServiceException(ResultCode.OSS_NOT_EXIST);
        }
        nextInitSetting = System.currentTimeMillis() + INTERVAL;
        localSetting = new Gson().fromJson(setting.getSettingValue(), LocalSetting.class);
        return localSetting;
    }
    return localSetting;
}
----------------------------------------------------------------------------------WebMvcConfigurer 
@Configuration
@EnableWebMvc
public class StaticResourceConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/IMAGES/**").addResourceLocations("classpath:/IMAGES/");
        registry.addResourceHandler("/DIARY/**").addResourceLocations("file:F:/DIARY/");
    }
}
//文件资源存储在服务器的F盘下,那么访问 http://服务器域名或ip/DIARY/文件名.pdf 
//这里配置一个拦截器,如果访问路径是addResourceHandler中的 /DIARY/** ,
//那么就映射到访问本地的addResourceLocations 的参数的路径上,这样就可以让别人访问服务器的本地文件了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值