Java Aws s3在部署并在本地工作后未使用MultipartFile且无法正常将文件上载到tomcat服务器
将文件上载到aws s3 bucket时,其在本地工作正常。但是,当我在tomcat服务器上部署项目时,写入Java Aws s3在部署并在本地工作后未使用MultipartFile且无法正常将文件上载到tomcat服务器,java,file,amazon-s3,multipart,Java,File,Amazon S3,Multipart,将文件上载到aws s3 bucket时,其在本地工作正常。但是,当我在tomcat服务器上部署项目时,写入fileoutputstream(权限被拒绝) 这是图片 这是我的密码 private File convertMultiPartToFile(MultipartFile file) throws IOException { File convFile = new File(file.getOriginalFilename()); FileOutputSt
fileoutputstream
(权限被拒绝)
这是图片
这是我的密码
private File convertMultiPartToFile(MultipartFile file) throws IOException {
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
private String generateFileName(MultipartFile multiPart) {
return new Date().getTime() + "-" + multiPart.getOriginalFilename().replace(" ", "_");
}
private void uploadFileTos3bucket(String fileName, File file) {
s3client.putObject(
new PutObjectRequest(bucketName, fileName, file).withCannedAcl(CannedAccessControlList.PublicRead));
}
当我把File改为Multipartfile
时,它会显示这个错误
另外,若我将multipart直接上传到s3 bucket,那个么将其转换为文件将是一个错误。如果我将文件强制转换为多部分,则其给定(i/O)异常在该方法中出现: S3没有问题,您遇到此问题是因为您使用的是fileOutputstream,您没有指定任何文件夹来写入文件。但默认情况下,它会将文件写入项目中的target文件夹
private File convertMultiPartToFile(MultipartFile file) throws IOException {
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
因此,我在上传时通过创建一个文件夹到tomcat服务器解决了代码问题。
下次请求时。我删除了现有的目录并再次创建它,只是为了写文件
使用以下代码:
private File convertMultiPartToFile(MultipartFile file) throws IOException {
deleteDir(new File(NsdlUrlListService.einvoicePath)); //delete a dir
File files = new File("home/ubuntu/txtgenie/einvoice/"); //create a dir
if (!files.exists()) {
if (files.mkdirs()) {
logger.debug("Multiple directories are created!");
} else {
logger.debug("Failed to create multiple directories!");
}
}
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new
FileOutputStream("/home/ubuntu/txtgenie/einvoice/"+convFile);
logger.info(" File Name:: {} ", file);
String fileName = null;
byte[] bytes = file.getBytes();
fileName = file.getOriginalFilename();
if (!fileName.equals("No file")) {
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File("home/ubuntu/txtgenie/einvoice/"
+ fileName)));
bos.write(bytes);
bos.close();
}
catch (FileNotFoundException fnfe) {
logger.debug("File not found" + fnfe);
}
catch (IOException ioe) {
logger.debug("Error while writing to file" + ioe);
}
}
fos.write(file.getBytes());
fos.close();
return convFile;
}
删除目录
private boolean deleteDir(File file) {
logger.debug("DIR to delete :: " +file);
if (file.isDirectory()) {
String[] children = file.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir (new File(file, children[i]));
if (!success) {
return false;
}
}
}
logger.debug("The directory : "+file+" : is deleted.");
return file.delete();
}
private boolean deleteDir(文件){
debug(“要删除的目录::”+文件);
if(file.isDirectory()){
String[]children=file.list();
for(int i=0;i