spring 上传到 google 云存储桶的引导映像无法正常工作
spring boot image upload to the google cloud storage bucket is not working
我想将图像上传到 google 云存储,这是我从 spring 启动的代码。但问题是这根本不起作用,给我这样的错误:
2018-10-22 15:22:55.628 错误 6172 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] throw exception [Request processing failed;嵌套异常是 java.lang.IllegalArgumentException: 调用方法 public 抽象 java.io.InputStream org.apache.commons.fileupload.FileItemStream.openStream() 抛出 java.io.IOException 没有访问器方法!] 根本原因
请帮帮我。以下是我写的代码
private static Storage storage = null;
// [START init]
static {
storage = StorageOptions.getDefaultInstance().getService();
}
@SuppressWarnings("deprecation")
@RequestMapping(method = RequestMethod.POST, value = "/imageUpload")
public String uploadFile(FileItemStream fileStream)
throws IOException, ServletException {
String bucketName = "mcqimages";
checkFileExtension(fileStream.getName());
DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
DateTime dt = DateTime.now(DateTimeZone.UTC);
String dtString = dt.toString(dtf);
final String fileName = fileStream.getName() + dtString;
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, fileName)
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build(),
fileStream.openStream());
return blobInfo.getMediaLink();
}
private void checkFileExtension(String fileName) throws ServletException {
if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"};
for (String ext : allowedExt) {
if (fileName.endsWith(ext)) {
return;
}
}
throw new ServletException("file must be an image");
}
}
我会尝试上传文件:
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
//Set error message
}
else {
try {
String extension = FilenameUtils.getExtension(file.getOriginalFilename()); //Commons IO
// Get the file
byte[] bytes = file.getBytes();
....
}
这里是上传文件的一个很好的例子:https://www.baeldung.com/spring-file-upload
我终于想到了这段代码:)。工作得很好。需要凭据将文件上传到 GCP 存储。您也可以从 JSON 格式生成凭据。
https://cloud.google.com/docs/authentication/production
Credentials credentials = GoogleCredentials.fromStream(new FileInputStream("C:\Users\sachinthah\Downloads\MCQ project -1f959c1fc3a4.json"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
public CloudStorageHelper() throws IOException {
}
@SuppressWarnings("deprecation")
@RequestMapping(method = RequestMethod.POST, value = "/imageUpload112")
public String uploadFile(@RequestParam("fileseee")MultipartFile fileStream)
throws IOException, ServletException {
String bucketName = "mcqimages";
checkFileExtension(fileStream.getName());
DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
DateTime dt = DateTime.now(DateTimeZone.UTC);
String dtString = dt.toString(dtf);
final String fileName = fileStream.getName() + dtString;
File file = convertMultiPartToFile( fileStream );
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, fileName)
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build()
// file.openStream()
);
System.out.println(blobInfo.getMediaLink());
return blobInfo.getMediaLink();
}
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 void checkFileExtension(String fileName) throws ServletException {
if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"};
for (String ext : allowedExt) {
if (fileName.endsWith(ext)) {
return;
}
}
throw new ServletException("file must be an image");
}
}
Credentials credentials = GoogleCredentials.fromStream(new ClassPathResource("key.json").getInputStream());
Storage storage=StorageOptions.newBuilder().setCredentials(credentials).build().getService();
BlobId blobId = BlobId.of(bucketName, yourobjectName);
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
storage.create(blobInfo,Files.readAllBytes(Paths.get(filePath)));
我想将图像上传到 google 云存储,这是我从 spring 启动的代码。但问题是这根本不起作用,给我这样的错误:
2018-10-22 15:22:55.628 错误 6172 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] throw exception [Request processing failed;嵌套异常是 java.lang.IllegalArgumentException: 调用方法 public 抽象 java.io.InputStream org.apache.commons.fileupload.FileItemStream.openStream() 抛出 java.io.IOException 没有访问器方法!] 根本原因
请帮帮我。以下是我写的代码
private static Storage storage = null;
// [START init]
static {
storage = StorageOptions.getDefaultInstance().getService();
}
@SuppressWarnings("deprecation")
@RequestMapping(method = RequestMethod.POST, value = "/imageUpload")
public String uploadFile(FileItemStream fileStream)
throws IOException, ServletException {
String bucketName = "mcqimages";
checkFileExtension(fileStream.getName());
DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
DateTime dt = DateTime.now(DateTimeZone.UTC);
String dtString = dt.toString(dtf);
final String fileName = fileStream.getName() + dtString;
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, fileName)
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build(),
fileStream.openStream());
return blobInfo.getMediaLink();
}
private void checkFileExtension(String fileName) throws ServletException {
if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"};
for (String ext : allowedExt) {
if (fileName.endsWith(ext)) {
return;
}
}
throw new ServletException("file must be an image");
}
}
我会尝试上传文件:
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
//Set error message
}
else {
try {
String extension = FilenameUtils.getExtension(file.getOriginalFilename()); //Commons IO
// Get the file
byte[] bytes = file.getBytes();
....
}
这里是上传文件的一个很好的例子:https://www.baeldung.com/spring-file-upload
我终于想到了这段代码:)。工作得很好。需要凭据将文件上传到 GCP 存储。您也可以从 JSON 格式生成凭据。
https://cloud.google.com/docs/authentication/production
Credentials credentials = GoogleCredentials.fromStream(new FileInputStream("C:\Users\sachinthah\Downloads\MCQ project -1f959c1fc3a4.json"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
public CloudStorageHelper() throws IOException {
}
@SuppressWarnings("deprecation")
@RequestMapping(method = RequestMethod.POST, value = "/imageUpload112")
public String uploadFile(@RequestParam("fileseee")MultipartFile fileStream)
throws IOException, ServletException {
String bucketName = "mcqimages";
checkFileExtension(fileStream.getName());
DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
DateTime dt = DateTime.now(DateTimeZone.UTC);
String dtString = dt.toString(dtf);
final String fileName = fileStream.getName() + dtString;
File file = convertMultiPartToFile( fileStream );
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, fileName)
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build()
// file.openStream()
);
System.out.println(blobInfo.getMediaLink());
return blobInfo.getMediaLink();
}
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 void checkFileExtension(String fileName) throws ServletException {
if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"};
for (String ext : allowedExt) {
if (fileName.endsWith(ext)) {
return;
}
}
throw new ServletException("file must be an image");
}
}
Credentials credentials = GoogleCredentials.fromStream(new ClassPathResource("key.json").getInputStream());
Storage storage=StorageOptions.newBuilder().setCredentials(credentials).build().getService();
BlobId blobId = BlobId.of(bucketName, yourobjectName);
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
storage.create(blobInfo,Files.readAllBytes(Paths.get(filePath)));