2016-10-15 6 views
1

Java + Jersey + multipart + Tomcat + HTML/CSS/JSでファイルのアップロードを取得しようとしています。Jersey multipart getFileName()にパスが連結されています

テスト目的のために、私はダウンロードフォルダから任意のファイルをアップロードしてデスクトップに書き込もうとしています。

私の唯一の問題は、アップロードされたファイルのファイル名をfileDetail.getFileName();経由で取得しようとすると、どうにかしてファイル名( "C:UsersHackRDownloadsstackexample.csv")で連結パスが取得されているようです。

String uploadedFileLocation = "C:/Users/HackR/Desktop/" 
      + fileDetail.getFileName(); 

し、それを書き出し:(チュートリアル以下)

私の計画は、ファイル名に先ディレクトリを付加することでした。しかし、それはこのように代にそれを書き込もうとして終わる:実際にちょうど私のデスクトップ上のCという名前の0キロバイトのファイルを作成します

C:/Users/HackR/Desktop/C:UsersHackRDownloadsstackexample.csv 

実際のファイル名を、この例で必要な方法(パスがない)にするにはどうすればよいですか?

これは私の全体のファイルアップロードサービスです:

package com.mkyong.rest; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import com.sun.jersey.core.header.FormDataContentDisposition; 
import com.sun.jersey.multipart.FormDataParam; 

@Path("/file") 
public class UploadFileService { 

    @POST 
    @Path("/upload") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public Response uploadFile(
      @FormDataParam("file") InputStream uploadedInputStream, 
      @FormDataParam("file") FormDataContentDisposition fileDetail) { 

     String uploadedFileLocation = "C:/Users/HackR/Desktop/" 
       + fileDetail.getFileName(); 

     // save it 
     writeToFile(uploadedInputStream, uploadedFileLocation); 

     String output = "File uploaded to : " + uploadedFileLocation; 

     return Response.status(200).entity(output).build(); 

    } 

    // save uploaded file to new location 
    private void writeToFile(InputStream uploadedInputStream, 
      String uploadedFileLocation) { 

     try { 
      OutputStream out = new FileOutputStream(new File(
        uploadedFileLocation)); 
      int read = 0; 
      byte[] bytes = new byte[1024]; 

      out = new FileOutputStream(new File(uploadedFileLocation)); 
      while ((read = uploadedInputStream.read(bytes)) != -1) { 
       out.write(bytes, 0, read); 
      } 
      out.flush(); 
      out.close(); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

    } 

} 
+0

あなたは正確なプラットフォームを教えてください。ウィンドウズ10?これは、私の推測では、あなたのシステムのブラウザエンジンでEclipseが使用していると思われる問題の原因を簡単に見つけることができるからです。 – yeoman

+0

@yeomanはい、Windows 10です。ありがとうございます。 –

答えて

1

連結ファイル名は、特に場合など、正しくHTML、CSS、JSをサポートしていない可能性がEclipseの内部ブラウ​​ザを使用した結果であり、 Angular JSやWebkit技術を間接的に使用しています。

eclipseの内部ブラウ​​ザは、実際にはネイティブのブラウザコントロールです:) Macでは、WebkitのエンジンであるSafariを使用します。

のSafariを使用して作業を行い、または多分それはWebKitの比較的最近のフォークに基づいているため、まだ非常に似ているクロム、で、それはあまりにも、Mac上で日食内部ブラウ​​ザで動作するはずです:)

あなたのポストは、あなたがWindowsマシン上にいることを示唆しているので、あなたのコードがインストールされているInternet Explorerで動作するようにする必要があります。

いずれにしても幸運!

+0

ありがとうございます。あなたの答えは私の質問の元のタイトルを参照していると思います。私はこれを謝罪します。そのタイトルは、私が昨日書いた未発表の質問に由来し、この質問には対応していませんでした。私はタイトルを修正しました。再び、私は混乱のために謝ります。 –

+0

ああ、はるかに良い! :D – yeoman

+0

OKなので、これはwebkitやブラウザとは関係ないと思っていましたが、あなたが正しいと分かりました。この問題は、愚かな内部ブラウ​​ザでのみ発生します。 Chromeでは発生しません。アップロードボタンをスタイルするためにCSSを使用し、エラーを表示するためにAngular JSを使用した点を除いて、私はファイルアップロードページで単純なHTMLを使用しているので驚いています。内部Eclipseブラウザ(Internet Explorer)をどうにかしなくてはならないstyles.cssファイルにいくつかのwebkit-filter CSS文があるので、ああ、私は推測します。そのような古典的な –

関連する問題